Skip to content

Commit

Permalink
feat(styling): add makeStyles
Browse files Browse the repository at this point in the history
add makeStyles which exposes a useStyles hook with mergeDeep function

resolves #20

Signed-off-by: Niloy Sikdar <niloysikdar30@gmail.com>
  • Loading branch information
niloysikdar committed Jun 24, 2022
1 parent 1042629 commit 9fe1501
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 3 deletions.
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './components/Email';
export * from './utils';
38 changes: 38 additions & 0 deletions src/utils/mergeDeep.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { CSSProperties } from 'react';
import { CSSClasses } from './stylings';

const isObject = (item: CSSClasses | CSSProperties): boolean => {
return item && typeof item === 'object' && !Array.isArray(item);
};

export const mergeDeep = (target: CSSClasses, ...sources: CSSClasses[]): CSSClasses => {
if (!sources.length) return target;
const source: CSSClasses = sources.shift() as CSSClasses;

if (isObject(target) && isObject(source)) {
for (const key in source) {
if (isObject(source[key])) {
if (!target[key]) {
Object.assign(target, {
[key]: source[key],
});
} else {
const targetObject = { ...target[key] };
const srcObject = { ...source[key] };
const mergedObject = Object.assign(targetObject, srcObject);
target[key] = mergedObject;
}
} else {
Object.assign(target, {
[key]: source[key],
});
}
}
}

if (sources.length) {
return mergeDeep(target, ...sources);
} else {
return target;
}
};
13 changes: 10 additions & 3 deletions src/utils/stylings.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { CSSProperties } from 'react';
import { mergeDeep } from './mergeDeep';

// interface CSSClasses {
// [key: string]: CSSProperties;
// }
export interface CSSClasses {
[key: string]: CSSProperties;
}

export const sx = (...args: CSSProperties[]): CSSProperties => {
const initialValue: CSSProperties = {};
Expand All @@ -13,3 +14,9 @@ export const sx = (...args: CSSProperties[]): CSSProperties => {

return result;
};

export const makeStyles = (classes: CSSClasses) => {
return (classes_: CSSClasses) => {
return mergeDeep(classes, classes_);
};
};

0 comments on commit 9fe1501

Please sign in to comment.