From ebe1e8019650f30b304f044941e1dd280a7b298f Mon Sep 17 00:00:00 2001 From: 50l3r <500l3r@gmail.com> Date: Tue, 23 Apr 2024 19:06:18 +0200 Subject: [PATCH] feat: improve types --- package.json | 2 +- .../data-display/k-table/filters/select.vue | 2 +- .../data-display/k-table/k-table.types.ts | 4 +- .../data-display/k-table/k-table.vue | 1 - .../data-display/k-table/lib/filter.ts | 11 ++-- .../data-entry/k-checkbox/k-checkbox.vue | 2 +- .../k-inline-editor/k-inline-editor.vue | 2 +- src/components/data-entry/k-radio/k-radio.vue | 2 +- src/components/feedback/k-modal/k-modal.vue | 4 +- src/config/_settings.ts | 2 + src/store/modules/query.ts | 60 ++++++++----------- tsconfig.json | 1 + 12 files changed, 40 insertions(+), 53 deletions(-) diff --git a/package.json b/package.json index 0ffaa49..85ee9cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kodama-ui", - "version": "0.30.0", + "version": "0.31.1", "description": "Kodama UI is a Vue 3 component library that provides a set of components & funcionality to build your application.", "homepage": "https://50l3r.github.io/kodama-ui", "keywords": [ diff --git a/src/components/data-display/k-table/filters/select.vue b/src/components/data-display/k-table/filters/select.vue index 515d505..35fb253 100644 --- a/src/components/data-display/k-table/filters/select.vue +++ b/src/components/data-display/k-table/filters/select.vue @@ -85,7 +85,7 @@ const tooltip = ref() const filter = ( - operator: QueryFilterOperator, + operator: string, value: KTableColumnFilter['value'] ) => { ctx.emit('filter', { [operator]: value }) diff --git a/src/components/data-display/k-table/k-table.types.ts b/src/components/data-display/k-table/k-table.types.ts index 7331e20..cdb0c13 100644 --- a/src/components/data-display/k-table/k-table.types.ts +++ b/src/components/data-display/k-table/k-table.types.ts @@ -1,11 +1,11 @@ import { ExtractPropTypes, SetupContext } from 'vue' -import { QueryFilterFields, QueryParams } from '../../../store/modules/query' +import { QueryParams } from '../../../store/modules/query' import Props from './k-table.props' export type KTableParams = { page: number order: QueryParams['order'] - filter: QueryFilterFields | null + filter: QueryParams['filter'] limit: QueryParams['limit'] reset: boolean strict: QueryParams['strict'] diff --git a/src/components/data-display/k-table/k-table.vue b/src/components/data-display/k-table/k-table.vue index d3806cc..93e6beb 100644 --- a/src/components/data-display/k-table/k-table.vue +++ b/src/components/data-display/k-table/k-table.vue @@ -606,7 +606,6 @@ ctx.emit('fetch', query.value) emitter.on(`ktable_${props.store}_fetch`, () => { - console.log('emite') ctx.emit('fetch', query.value) }) }) diff --git a/src/components/data-display/k-table/lib/filter.ts b/src/components/data-display/k-table/lib/filter.ts index ad12d90..e0a1fc0 100644 --- a/src/components/data-display/k-table/lib/filter.ts +++ b/src/components/data-display/k-table/lib/filter.ts @@ -1,9 +1,6 @@ import { computed, reactive } from 'vue' import { useQuery } from '../../../../store' -import { - QueryFilterField, - QueryFilterFields -} from '../../../../store/modules/query' +import { QueryFilter } from '../../../../store/modules/query' import { KTableContext, KTableParams, KTableProps } from '../k-table.types' // import cloneDeep from 'lodash.clonedeep' @@ -59,7 +56,7 @@ export default function (ctx: KTableContext, props: KTableProps): any { ctx.emit('fetch', query.value) } - const filter = (field: string, filter: QueryFilterField | null) => { + const filter = (field: string, filter: QueryFilter | null) => { const queryStore = useQuery() if (props.store) { @@ -184,7 +181,7 @@ export default function (ctx: KTableContext, props: KTableProps): any { const mergeFilters = ( required: any = null, - custom: QueryFilterFields | null = null, + custom: QueryFilter | null = null, strict = true ) => { if (!required && !custom) return null @@ -200,7 +197,7 @@ export default function (ctx: KTableContext, props: KTableProps): any { const requiredFields = getFieldFilters(required) - const customFilters: QueryFilterFields[] = [] + const customFilters: QueryFilter[] = [] Object.keys(custom).forEach((field) => { const find = requiredFields.find((f) => f.field === field) diff --git a/src/components/data-entry/k-checkbox/k-checkbox.vue b/src/components/data-entry/k-checkbox/k-checkbox.vue index 5f3a329..343b621 100644 --- a/src/components/data-entry/k-checkbox/k-checkbox.vue +++ b/src/components/data-entry/k-checkbox/k-checkbox.vue @@ -68,7 +68,7 @@ const hasSlot = (name: string) => !!ctx.slots[name] const classes = computed(() => { - let classes = [] + let classes: string[] = [] if (props.color === 'white' || props.color === 'black') { classes.push( diff --git a/src/components/data-entry/k-inline-editor/k-inline-editor.vue b/src/components/data-entry/k-inline-editor/k-inline-editor.vue index 4d8e874..6b5af3b 100644 --- a/src/components/data-entry/k-inline-editor/k-inline-editor.vue +++ b/src/components/data-entry/k-inline-editor/k-inline-editor.vue @@ -68,7 +68,7 @@ }) const inputClasses = computed(() => { - const classes = [] + const classes: string[] = [] if (props.size === 'sm') classes.push('text-sm') if (props.size === 'md') classes.push('text-base') diff --git a/src/components/data-entry/k-radio/k-radio.vue b/src/components/data-entry/k-radio/k-radio.vue index 6b88394..c5b5098 100644 --- a/src/components/data-entry/k-radio/k-radio.vue +++ b/src/components/data-entry/k-radio/k-radio.vue @@ -63,7 +63,7 @@ const hasSlot = (name: string) => !!ctx.slots[name] const classes = computed(() => { - let classes = [] + let classes: string[] = [] if (props.color === 'white' || props.color === 'black') { classes.push( diff --git a/src/components/feedback/k-modal/k-modal.vue b/src/components/feedback/k-modal/k-modal.vue index 2631165..a8719e9 100644 --- a/src/components/feedback/k-modal/k-modal.vue +++ b/src/components/feedback/k-modal/k-modal.vue @@ -212,7 +212,7 @@ }) const defaultBackdropClasses = computed(() => { - const classes = [ + const classes: string[] = [ 'bg-gray-900 bg-opacity-50 dark:bg-opacity-80 fixed inset-0' ] @@ -234,7 +234,7 @@ }) const contentClasses = computed(() => { - const classes = [] + const classes: string[] = [] if (props.size === 'xs') { classes.push('max-w-md') diff --git a/src/config/_settings.ts b/src/config/_settings.ts index ee1f278..ada64f0 100644 --- a/src/config/_settings.ts +++ b/src/config/_settings.ts @@ -13,6 +13,8 @@ export interface CustomConfig extends Partial { profile: RouteLocationRaw configuration: RouteLocationRaw } + + [x: string | number]: unknown } export enum AvatarType { diff --git a/src/store/modules/query.ts b/src/store/modules/query.ts index dacb956..c50a13d 100644 --- a/src/store/modules/query.ts +++ b/src/store/modules/query.ts @@ -1,46 +1,34 @@ import { defineStore } from 'pinia' -export type QueryFilterOperator = - | '$eq' - | '$neq' - | '$gt' - | '$lt' - | '$gte' - | '$lte' - | '$in' - | '$nin' - | '$like' - | '$from' - | '$to' - -type QueryCondition = '$and' | '$or' - -export type QueryFilterCondition = Partial< - Record< - QueryCondition, - Array< - | QueryFilterFields[] - | Partial< - Record< - QueryCondition, - QueryFilterFields[] | QueryFilterCondition[] - > - > - > - > -> -export type QueryFilterFields = Record -export type QueryFilterField = Partial> - -export type QueryFilter = Partial< - Record> -> +export type QueryFilterOperator = { + $eq?: string | number + $neq?: string | number + $gt?: number + $lt?: number + $gte?: number + $lte?: number + $in?: (string | number)[] + $nin?: (string | number)[] + $like?: string + $from?: string | Date + $to?: string | Date +} + +export type QueryCondition = { + [key: string]: QueryFilterOperator +} + +export type QueryLogicalOperator = { + $and?: QueryFilter[] + $or?: QueryFilter[] +} +export type QueryFilter = QueryCondition | QueryLogicalOperator export type QueryOrder = Record export type QueryParams = { order: QueryOrder | null - filter: QueryFilterFields | null + filter: QueryFilter | null limit: number strict: boolean } diff --git a/tsconfig.json b/tsconfig.json index 7e503ef..2df8348 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "noImplicitAny": false, "target": "ESNext", "useDefineForClassFields": true, "module": "ESNext",