Skip to content

Instantly share code, notes, and snippets.

View dimensi's full-sized avatar
🏠
Working from home

Nikita Nafranets dimensi

🏠
Working from home
View GitHub Profile
@dimensi
dimensi / BaseResolver.ts
Created November 29, 2018 11:27
type-graphql BaseResolver
import camelCase from 'camelcase'
import { GraphQLResolveInfo } from 'graphql'
import pluralize from 'pluralize'
import {
Arg,
Authorized,
Ctx,
Info,
Int,
Mutation,
@dimensi
dimensi / relations.ts
Created November 29, 2018 11:14
get relations by graphql schema and typeorm
import graphqlFields, { ObjectFields } from 'graphql-fields'
import { GraphQLResolveInfo } from 'graphql'
import { Repository, getRepository, EntityMetadata } from 'typeorm'
import { get, set } from 'lodash'
interface Property {
propertyName: string
propertyPath: string
}
@dimensi
dimensi / ast.json
Last active November 29, 2018 09:00
Graphql property collector
{
"kind": "Document",
"definitions": [
{
"kind": "OperationDefinition",
"operation": "query",
"variableDefinitions": [],
"directives": [],
"selectionSet": {
"kind": "SelectionSet",
@dimensi
dimensi / .csscomb.json
Last active October 31, 2018 11:53
CSS comb config
{
"remove-empty-rulesets": true,
"always-semicolon": true,
"color-case": "lower",
"block-indent": " ",
"color-shorthand": true,
"element-case": "lower",
"eof-newline": true,
"leading-zero": true,
"quotes": "double",
@dimensi
dimensi / list.vue
Created October 24, 2018 21:23
List animations on animejs
<template>
<div :class="c($style.AnimationList, {
list: type
})">
<div v-for="i in 9" :class="$style.item" :key="i">
<component ref="items" :is="icon.is" :class="[$style.icon, $style[type]]" :icon="icon.icon"/>
</div>
</div>
</template>
@dimensi
dimensi / SlidePage.vue
Created August 30, 2018 19:24
Stepped animation in vue
<template>
<Slide>
<SlidePreview slot="preview"
v-bind="previewData"
:display-blur-items="displayBlurItems"
:animate-blur-items="animateBlurItems"
@transitionend="removeWait('blurItems')"/>
<SlideAbout v-bind="aboutData" :hide="hideText"
@transitionend="removeWait('text')"/>
</Slide>
export const waitImage = ref =>
new Promise((resolve, reject) => {
ref.onload = (event) => { resolve(event); ref.onload = null };
ref.onerror = (event) => { reject(event); ref.onerror = null };
});
const createImage = str => Object.assign(document.createElement('img'), { src: str });
const waitImages = arrStr => Promise.all(arrStr.map(str => waitImage(createImage(str))));
const images = Array.from({ length: 10 }, (_, index) => `https://source.unsplash.com/random?v=${index}`)
<template>
<div :class="b({ loading: isLoading })" :style="style">
<ImgLoader class="image-handler__loader" v-if="isLoading"/>
<img :src="image" v-bind="$attrs" ref="image">
</div>
</template>
<script>
import ImgLoader from 'src/views/elements/ImgLoader';
export const waitImage = ref =>
@dimensi
dimensi / index.js
Created May 30, 2018 19:54
Apipie class example
const checkAuth = (options) => (context) => {
if (context.meta.auth) {
context.headers.append('token', 'my super token')
}
}
class BaseApi extends Apipie {
constructor() {
this.baseURL = 'http://localhost'
this.beforeHooks = [checkAuth()];
@dimensi
dimensi / gulpfile.js
Created May 12, 2018 15:26
scss builder
const gulp = require('gulp')
const path = require('path')
const browserSync = require('browser-sync')
const $ = require('gulp-load-plugins')()
const config = {
autoprefixer: {
browsers: ['> 5%', 'last 6 iOS versions']
},
browserConfig: {