From c6531f0b1b81527eaf47330dcbca82fadd1f6857 Mon Sep 17 00:00:00 2001 From: akashi Date: Mon, 7 Aug 2023 13:55:06 +0800 Subject: [PATCH 1/8] :sparkles: feat: get-field-with-default --- packages/core/getFieldWithDefault/index.test.ts | 3 +-- packages/core/getFieldWithDefault/index.ts | 11 +++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/core/getFieldWithDefault/index.test.ts b/packages/core/getFieldWithDefault/index.test.ts index dd6acc1..8315710 100644 --- a/packages/core/getFieldWithDefault/index.test.ts +++ b/packages/core/getFieldWithDefault/index.test.ts @@ -6,10 +6,9 @@ describe('getFieldWithDefault', () => { const obj = { name: 'asuka', age: 23, height: 158 } expect(getFieldWithDefault( obj, - 'defaultValue', (obj as any)?.id, obj?.name, (obj as any)?.nickname, - )).toMatchInlineSnapshot('"defaultValue"') + )).toMatchInlineSnapshot('"asuka"') }) }) diff --git a/packages/core/getFieldWithDefault/index.ts b/packages/core/getFieldWithDefault/index.ts index b2540c1..996eea4 100644 --- a/packages/core/getFieldWithDefault/index.ts +++ b/packages/core/getFieldWithDefault/index.ts @@ -3,18 +3,17 @@ interface ObjectWithFields { [key: string]: any } // TODO: get field with multiple default fields export function getFieldWithDefault( obj: ObjectWithFields, - defaultValue: T, - ...fields: string[] + ...fields: T[] ): T { + const defaultValue = fields.find(f => f) as T + if (typeof obj !== 'object' || obj === null) return defaultValue - console.log('fields', fields) for (const field of fields) { - if (Reflect.has(obj, field)) - return field as T + if (Reflect.has(obj, field as string)) + return field } - console.log('default') return defaultValue } From bc03374532c59569fccac946c167e28eee03ed68 Mon Sep 17 00:00:00 2001 From: akashi Date: Mon, 7 Aug 2023 14:05:09 +0800 Subject: [PATCH 2/8] :white_check_mark: chore: complete test --- packages/core/getFieldWithDefault/index.md | 2 +- packages/core/getFieldWithDefault/index.test.ts | 7 +++++++ packages/core/getFieldWithDefault/index.ts | 1 - 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/core/getFieldWithDefault/index.md b/packages/core/getFieldWithDefault/index.md index 9a3d1bd..b62f853 100644 --- a/packages/core/getFieldWithDefault/index.md +++ b/packages/core/getFieldWithDefault/index.md @@ -12,5 +12,5 @@ Get object field with multiple default fields. import { getFieldWithDefault } from '@use-kit/functions' const obj = { name: 'asuka', age: 23, height: 158 } -const ret = getFieldWithDefault(obj, 'default', obj.id, obj.name, obj.nickname) // 'asuak' +const ret = getFieldWithDefault(obj, obj.id, obj.name, obj.nickname) // 'asuak' ``` diff --git a/packages/core/getFieldWithDefault/index.test.ts b/packages/core/getFieldWithDefault/index.test.ts index 8315710..4463040 100644 --- a/packages/core/getFieldWithDefault/index.test.ts +++ b/packages/core/getFieldWithDefault/index.test.ts @@ -11,4 +11,11 @@ describe('getFieldWithDefault', () => { (obj as any)?.nickname, )).toMatchInlineSnapshot('"asuka"') }) + + it('undefined', () => { + const obj = { name: 'asuka', age: 23, height: 158 } + const fields = [undefined, null, '', 'field'] + + expect(getFieldWithDefault(obj, ...fields)).toMatchInlineSnapshot('"field"') + }) }) diff --git a/packages/core/getFieldWithDefault/index.ts b/packages/core/getFieldWithDefault/index.ts index 996eea4..b677922 100644 --- a/packages/core/getFieldWithDefault/index.ts +++ b/packages/core/getFieldWithDefault/index.ts @@ -1,6 +1,5 @@ interface ObjectWithFields { [key: string]: any } -// TODO: get field with multiple default fields export function getFieldWithDefault( obj: ObjectWithFields, ...fields: T[] From 7b970987ac2596670df73a53ae81967c3cdd80c4 Mon Sep 17 00:00:00 2001 From: akashi Date: Tue, 8 Aug 2023 10:11:52 +0800 Subject: [PATCH 3/8] :zap: chore: export & complete document --- packages/core/getFieldWithDefault/index.test.ts | 2 +- packages/core/index.ts | 1 + packages/docs/core/getFieldWithDefault/index.md | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core/getFieldWithDefault/index.test.ts b/packages/core/getFieldWithDefault/index.test.ts index 4463040..537d238 100644 --- a/packages/core/getFieldWithDefault/index.test.ts +++ b/packages/core/getFieldWithDefault/index.test.ts @@ -12,7 +12,7 @@ describe('getFieldWithDefault', () => { )).toMatchInlineSnapshot('"asuka"') }) - it('undefined', () => { + it('multiple undefined', () => { const obj = { name: 'asuka', age: 23, height: 158 } const fields = [undefined, null, '', 'field'] diff --git a/packages/core/index.ts b/packages/core/index.ts index 6998809..074344c 100644 --- a/packages/core/index.ts +++ b/packages/core/index.ts @@ -12,6 +12,7 @@ export * from './generateTree' export * from './getAge' export * from './getConstellation' export * from './getField' +export * from './getFieldWithDefault' export * from './getFileType' export * from './getKeys' export * from './getObjectField' diff --git a/packages/docs/core/getFieldWithDefault/index.md b/packages/docs/core/getFieldWithDefault/index.md index 9a3d1bd..b62f853 100644 --- a/packages/docs/core/getFieldWithDefault/index.md +++ b/packages/docs/core/getFieldWithDefault/index.md @@ -12,5 +12,5 @@ Get object field with multiple default fields. import { getFieldWithDefault } from '@use-kit/functions' const obj = { name: 'asuka', age: 23, height: 158 } -const ret = getFieldWithDefault(obj, 'default', obj.id, obj.name, obj.nickname) // 'asuak' +const ret = getFieldWithDefault(obj, obj.id, obj.name, obj.nickname) // 'asuak' ``` From 5696ddb8ed709c3c3d967df9bf20fee9898f1ec7 Mon Sep 17 00:00:00 2001 From: akashi Date: Tue, 5 Sep 2023 10:36:50 +0800 Subject: [PATCH 4/8] :tada: feat: isFullScreen --- packages/browser/toggleFullScreen/index.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/browser/toggleFullScreen/index.ts b/packages/browser/toggleFullScreen/index.ts index b1ea71e..604a857 100644 --- a/packages/browser/toggleFullScreen/index.ts +++ b/packages/browser/toggleFullScreen/index.ts @@ -6,7 +6,7 @@ export function fullScreen(id?: string) { const screen = (el as Element).requestFullscreen let wScript = null - if (typeof screen != 'undefined' && screen) { + if (typeof screen != 'undefined') { screen.call(el) return } @@ -23,7 +23,7 @@ export function exitFullScreen() { let wScript = null - if (typeof screen != 'undefined' && screen) { + if (typeof screen != 'undefined') { screen.call(document) return } @@ -35,6 +35,14 @@ export function exitFullScreen() { } } +export function isFullScreen(): boolean { + const fullscreenElement + = document.fullscreenElement + || (document as any).webkitFullscreenElement + || (document as any).mozFullScreenElement + return fullscreenElement !== undefined +} + export function toggleFullScreen(element: HTMLElement) { element = element || document.documentElement if ( From ab1893aa8b43e1691ce278fc399cb29a698b7500 Mon Sep 17 00:00:00 2001 From: akashi Date: Tue, 5 Sep 2023 10:58:01 +0800 Subject: [PATCH 5/8] :zap: fix: toggleFullScreen optional params --- packages/browser/toggleFullScreen/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/browser/toggleFullScreen/index.ts b/packages/browser/toggleFullScreen/index.ts index 604a857..f3bb002 100644 --- a/packages/browser/toggleFullScreen/index.ts +++ b/packages/browser/toggleFullScreen/index.ts @@ -43,7 +43,7 @@ export function isFullScreen(): boolean { return fullscreenElement !== undefined } -export function toggleFullScreen(element: HTMLElement) { +export function toggleFullScreen(element?: HTMLElement) { element = element || document.documentElement if ( ( From 6ac07b9c252b0688da5928cc2279d2d39d7afa68 Mon Sep 17 00:00:00 2001 From: akashi Date: Tue, 12 Sep 2023 11:18:00 +0800 Subject: [PATCH 6/8] :tada: feat: get-rating-star --- packages/core/getRatingStar/index.test.ts | 8 ++++++++ packages/core/getRatingStar/index.ts | 6 ++++++ 2 files changed, 14 insertions(+) create mode 100644 packages/core/getRatingStar/index.test.ts create mode 100644 packages/core/getRatingStar/index.ts diff --git a/packages/core/getRatingStar/index.test.ts b/packages/core/getRatingStar/index.test.ts new file mode 100644 index 0000000..c6210e8 --- /dev/null +++ b/packages/core/getRatingStar/index.test.ts @@ -0,0 +1,8 @@ +import { describe, expect, it } from 'vitest' +import { getRatingStar } from '.' + +describe('getRatingStar', () => { + it('should return a rating', () => { + expect(getRatingStar(5)).toMatchInlineSnapshot('"★★★★★"') + }) +}) diff --git a/packages/core/getRatingStar/index.ts b/packages/core/getRatingStar/index.ts new file mode 100644 index 0000000..a435c8e --- /dev/null +++ b/packages/core/getRatingStar/index.ts @@ -0,0 +1,6 @@ +const STARS = '★★★★★☆☆☆☆☆' + +export function getRatingStar(score: number) { + const MAX_SCORE = 5 + return STARS.slice(MAX_SCORE - score, MAX_SCORE + (MAX_SCORE - score)) +} From 53984d86dfdaa25afe1489535a721125d4790b2e Mon Sep 17 00:00:00 2001 From: akashi Date: Fri, 15 Sep 2023 16:40:54 +0800 Subject: [PATCH 7/8] :zap: feat: merge-list --- packages/core/isEmpty/index.test.ts | 5 ++++ packages/core/mergeList/index.test.ts | 33 +++++++++++++++++++++++++++ packages/core/mergeList/index.ts | 10 +++++--- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/packages/core/isEmpty/index.test.ts b/packages/core/isEmpty/index.test.ts index ebae441..b826717 100644 --- a/packages/core/isEmpty/index.test.ts +++ b/packages/core/isEmpty/index.test.ts @@ -26,4 +26,9 @@ describe('is empty', () => { it('should be true', () => { expect(isEmpty()).toBe(true) }) + + // TODO: fix + it.skip('should string empty', () => { + expect(isEmpty(' ')).toBe(true) + }) }) diff --git a/packages/core/mergeList/index.test.ts b/packages/core/mergeList/index.test.ts index 2482134..161f50a 100644 --- a/packages/core/mergeList/index.test.ts +++ b/packages/core/mergeList/index.test.ts @@ -42,3 +42,36 @@ describe('merge field', () => { ] `)) }) + +describe('merge with more field', () => { + const targetList = [{ + id: 1, + name: 'akashi', + }, { + id: 2, + name: 'asuka', + }] + + const sourceList = [{ + id: 3, + name: 'shiori', + }] + + const ret = mergeList(targetList, sourceList, 'id') + it('should return merge list', () => expect(ret).toMatchInlineSnapshot(` + [ + { + "id": 1, + "name": "akashi", + }, + { + "id": 2, + "name": "asuka", + }, + { + "id": 3, + "name": "shiori", + }, + ] + `)) +}) diff --git a/packages/core/mergeList/index.ts b/packages/core/mergeList/index.ts index 0071e74..b19c11f 100644 --- a/packages/core/mergeList/index.ts +++ b/packages/core/mergeList/index.ts @@ -9,9 +9,13 @@ export const mergeList = ( sourceList: objParams[], fieldKey: string, ) => { - targetList.forEach((target) => { - const source = sourceList.find(s => s[fieldKey] === target[fieldKey]) - mergeField(target, source ?? {}) + sourceList.forEach((source) => { + const target = targetList.find(t => t[fieldKey] === source[fieldKey]) + if (!target) + targetList.push(source) + + else + mergeField(target, source ?? {}) }) return targetList From 857a6c6a3abb0bbb0b6f063b5ad6894e56e3acc6 Mon Sep 17 00:00:00 2001 From: akashi Date: Sat, 16 Sep 2023 12:01:45 +0800 Subject: [PATCH 8/8] :bug: fix: is-empty --- packages/core/isEmpty/index.test.ts | 3 +-- packages/core/isEmpty/index.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/core/isEmpty/index.test.ts b/packages/core/isEmpty/index.test.ts index b826717..3269664 100644 --- a/packages/core/isEmpty/index.test.ts +++ b/packages/core/isEmpty/index.test.ts @@ -27,8 +27,7 @@ describe('is empty', () => { expect(isEmpty()).toBe(true) }) - // TODO: fix - it.skip('should string empty', () => { + it('should be true with string trim', () => { expect(isEmpty(' ')).toBe(true) }) }) diff --git a/packages/core/isEmpty/index.ts b/packages/core/isEmpty/index.ts index f02632e..54a6687 100644 --- a/packages/core/isEmpty/index.ts +++ b/packages/core/isEmpty/index.ts @@ -7,7 +7,7 @@ export const isEmpty = ( return true if (isString(field)) - return field === '' + return (field as string).trim() === '' if (isArray(field)) return !(field as []).length