Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion client/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,15 @@ const App: React.FC = () => {

const { preferredTheme, isDarkMode, unscheduleClassesByDefault, convertToLocalTimezone } = useGetUserSettingsQuery();

const decodedAssignedColors = useColorsDecoder(assignedColors, preferredTheme);
const decodedColors = useColorsDecoder(Object.values(assignedColors), preferredTheme);
const decodedAssignedColors = useMemo(
() =>
Object.keys(assignedColors).reduce<Record<string, string>>((object, key, index) => {
object[key] = decodedColors[index];
return object;
}, {}),
[assignedColors, decodedColors],
);

setDropzoneRange(days.length, earliestStartTime, latestEndTime);

Expand Down
5 changes: 1 addition & 4 deletions client/src/components/controls/ColorOptions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,7 @@ const ColorOptions: FC<ColorOptionsProps> = ({
[isDarkMode, preferredTheme],
);

const decodedColors = useColorsDecoder(
colors.reduce((obj, color, index) => ({ ...obj, [index]: color }), {}),
preferredTheme,
);
const decodedColors = useColorsDecoder(colors, preferredTheme);

return (
<List sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
Expand Down
19 changes: 6 additions & 13 deletions client/src/hooks/useColorDecoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,15 @@ const decodeColor = (assignedColor: string, preferredTheme: string) => {
};

/**
* Decodes all assigned colours using the `useColorDecoder` function.
* Converts each assigned colour key to its corresponding color value in the current or preview theme.
* Decodes all colours using the `useColorDecoder` function.
* Converts each colour to its corresponding color value in the current or preview theme.
*
* @param {Record<string, string>} assignedColors A record of assigned colour keys (e.g., { event1: 'default-1' }).
* @param {string[]} colors A record of assigned colour keys (e.g., { event1: 'default-1' }).
* @param {string} [previewTheme] An optional theme to use for decoding instead of the current theme.
* @returns {Record<string, string>} A record of decoded colour values (e.g., { event1: 'oklch(0.8 0.1 200)' }).
* @returns {string[]} A record of decoded colour values (e.g., { event1: 'oklch(0.8 0.1 200)' }).
*/
export const useColorsDecoder = (assignedColors: Record<string, string>, preferredTheme: string) => {
const decodedColors = Object.fromEntries(
Object.entries(assignedColors).map(([key, color]) => {
const decodedColor = decodeColor(color, preferredTheme);
return [key, decodedColor];
}),
);

return decodedColors;
export const useColorsDecoder = (colors: string[], preferredTheme: string): string[] => {
return colors.map((color) => decodeColor(color, preferredTheme));
};

/**
Expand Down
Loading