diff --git a/packages/uniwind/src/components/web/generateDataSet.ts b/packages/uniwind/src/components/web/generateDataSet.ts index 1fef751e..6913bd04 100644 --- a/packages/uniwind/src/components/web/generateDataSet.ts +++ b/packages/uniwind/src/components/web/generateDataSet.ts @@ -1,10 +1,13 @@ const toCamelCase = (str: string) => str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()) export const generateDataSet = (props: Record) => { - const dataSet: DataSet = props.dataSet !== undefined ? { ...props.dataSet } : {} + let dataSet = props.dataSet !== undefined + ? { ...props.dataSet } as DataSet + : undefined Object.entries(props).forEach(([key, value]) => { if (key.startsWith('data-')) { + dataSet ??= {} // Remove data- prefix dataSet[toCamelCase(key.slice(5))] = value } diff --git a/packages/uniwind/src/core/web/getWebStyles.ts b/packages/uniwind/src/core/web/getWebStyles.ts index 4042e609..c29bf464 100644 --- a/packages/uniwind/src/core/web/getWebStyles.ts +++ b/packages/uniwind/src/core/web/getWebStyles.ts @@ -103,19 +103,23 @@ export const getWebStyles = ( const dataSet = generateDataSet(componentProps ?? {}) - Object.entries(dataSet).forEach(([key, value]) => { - if (value === false || value === undefined) { - return - } + if (dataSet) { + Object.entries(dataSet).forEach(([key, value]) => { + if (value === false || value === undefined) { + return + } - dummy.dataset[key] = String(value) - }) + dummy.dataset[key] = String(value) + }) + } const computedStyles = getActiveStylesForClass(className) - Object.keys(dataSet).forEach(key => { - delete dummy.dataset[key] - }) + if (dataSet) { + Object.keys(dataSet).forEach(key => { + delete dummy.dataset[key] + }) + } return Object.fromEntries( Object.entries(computedStyles) diff --git a/packages/uniwind/tests/web/components/generateDataSet.test.ts b/packages/uniwind/tests/web/components/generateDataSet.test.ts new file mode 100644 index 00000000..c2a5adba --- /dev/null +++ b/packages/uniwind/tests/web/components/generateDataSet.test.ts @@ -0,0 +1,13 @@ +import { generateDataSet } from '../../../src/components/web/generateDataSet' + +describe('generateDataSet', () => { + test('returns undefined when no dataSet or data attributes are provided', () => { + expect(generateDataSet({})).toBeUndefined() + }) + + test('creates a dataSet from data attributes', () => { + expect(generateDataSet({ 'data-test-value': 'test' })).toEqual({ + testValue: 'test', + }) + }) +})