diff --git a/packages/browser/toggleFullScreen/index.ts b/packages/browser/toggleFullScreen/index.ts index b1ea71e..f3bb002 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,7 +35,15 @@ export function exitFullScreen() { } } -export function toggleFullScreen(element: HTMLElement) { +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 ( ( 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 dd6acc1..537d238 100644 --- a/packages/core/getFieldWithDefault/index.test.ts +++ b/packages/core/getFieldWithDefault/index.test.ts @@ -6,10 +6,16 @@ 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"') + }) + + it('multiple 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 b2540c1..b677922 100644 --- a/packages/core/getFieldWithDefault/index.ts +++ b/packages/core/getFieldWithDefault/index.ts @@ -1,20 +1,18 @@ 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 } 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)) +} 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/core/isEmpty/index.test.ts b/packages/core/isEmpty/index.test.ts index ebae441..3269664 100644 --- a/packages/core/isEmpty/index.test.ts +++ b/packages/core/isEmpty/index.test.ts @@ -26,4 +26,8 @@ describe('is empty', () => { it('should be true', () => { expect(isEmpty()).toBe(true) }) + + 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 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 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' ```