Theme modal changes
This commit is contained in:
@@ -39,14 +39,23 @@ function ThemeModal({
|
|||||||
const filtered = backgroundList.filter((item: any) =>
|
const filtered = backgroundList.filter((item: any) =>
|
||||||
item.toLowerCase().includes(query.toLowerCase()),
|
item.toLowerCase().includes(query.toLowerCase()),
|
||||||
);
|
);
|
||||||
|
const re = /(?:\.([^.]+))?$/;
|
||||||
const items = filtered.map((item: any, index: any) => (
|
const items = filtered.map((item: any, index: any) => (
|
||||||
<UnstyledButton
|
<UnstyledButton
|
||||||
data-list-item
|
data-list-item
|
||||||
key={item}
|
key={item}
|
||||||
display='block'
|
style={{
|
||||||
bg={index === hovered ? `no-repeat center url(/backgrounds/${item})` : `no-repeat center url(/backgrounds/${item})`}
|
width: '100%',
|
||||||
p={50}
|
height: '75px',
|
||||||
w={'90%'}
|
background:
|
||||||
|
index === hovered
|
||||||
|
? `linear-gradient(${selectedTheme.backgroundColor}88, ${selectedTheme.backgroundColor}88), no-repeat center url(/backgrounds/${item})`
|
||||||
|
: `no-repeat center url(/backgrounds/${item})`,
|
||||||
|
backgroundSize: 'cover',
|
||||||
|
backgroundColor: item === 'None' ? '#00000088' : undefined,
|
||||||
|
paddingLeft: 8,
|
||||||
|
alignItems: 'center',
|
||||||
|
}}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
setSelectedTheme({
|
setSelectedTheme({
|
||||||
...selectedTheme,
|
...selectedTheme,
|
||||||
@@ -54,13 +63,43 @@ function ThemeModal({
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
{item}
|
<Group h={'100%'} w={'100%'} justify='space-between'>
|
||||||
|
<Text
|
||||||
|
style={{
|
||||||
|
width: 'min-content',
|
||||||
|
height: 'min-content',
|
||||||
|
backdropFilter: 'blur(10px) brightness(.25)',
|
||||||
|
padding: 8,
|
||||||
|
borderRadius: 4,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{item.replace(/\.[^/.]+$/, '')}
|
||||||
|
</Text>
|
||||||
|
{item !== 'None' && (
|
||||||
|
<Text
|
||||||
|
style={{
|
||||||
|
width: 'min-content',
|
||||||
|
backdropFilter: 'blur(10px) brightness(.25)',
|
||||||
|
padding: 8,
|
||||||
|
marginTop: 34,
|
||||||
|
borderTopLeftRadius: 4,
|
||||||
|
color: theme.accentColor,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{re.exec(item.toUpperCase())?.[1]}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
</Group>
|
||||||
</UnstyledButton>
|
</UnstyledButton>
|
||||||
));
|
));
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (selectedTheme) {
|
if (selectedTheme) {
|
||||||
setQuery(selectedTheme?.backgroundImage || '');
|
if (selectedTheme?.backgroundImage === 'none') {
|
||||||
|
setQuery('');
|
||||||
|
} else {
|
||||||
|
setQuery(selectedTheme?.backgroundImage || '');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, [selectedTheme]);
|
}, [selectedTheme]);
|
||||||
|
|
||||||
@@ -273,44 +312,65 @@ function ThemeModal({
|
|||||||
)}
|
)}
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack h={'100%'} w={'50%'} align='center' justify='center'>
|
<Stack h={'100%'} w={'50%'} align='center' justify='center'>
|
||||||
<TextInput
|
<Group gap={0}>
|
||||||
className={textInputClasses.default}
|
<Text mr={8}>Search:</Text>
|
||||||
classNames={textInputClasses}
|
<TextInput
|
||||||
value={query}
|
className={textInputClasses.default}
|
||||||
onChange={(event) => {
|
classNames={textInputClasses}
|
||||||
setQuery(event.currentTarget.value);
|
value={query.replace(/\.[^/.]+$/, '')}
|
||||||
setHovered(-1);
|
rightSection={
|
||||||
}}
|
<FiX
|
||||||
onKeyDown={(event) => {
|
style={{
|
||||||
if (event.key === 'ArrowDown') {
|
cursor: 'pointer',
|
||||||
event.preventDefault();
|
margin: '4px',
|
||||||
setHovered((current) => {
|
}}
|
||||||
const nextIndex =
|
onClick={() => {
|
||||||
current + 1 >= filtered.length ? current : current + 1;
|
setQuery('');
|
||||||
viewportRef.current
|
}}
|
||||||
?.querySelectorAll('[data-list-item]')
|
/>
|
||||||
?.[nextIndex]?.scrollIntoView({ block: 'nearest' });
|
|
||||||
return nextIndex;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
onChange={(event) => {
|
||||||
|
setQuery(event.currentTarget.value);
|
||||||
|
setHovered(-1);
|
||||||
|
}}
|
||||||
|
onKeyDown={(event) => {
|
||||||
|
if (event.key === 'ArrowDown') {
|
||||||
|
event.preventDefault();
|
||||||
|
setHovered((current) => {
|
||||||
|
const nextIndex =
|
||||||
|
current + 1 >= filtered.length ? current : current + 1;
|
||||||
|
viewportRef.current
|
||||||
|
?.querySelectorAll('[data-list-item]')
|
||||||
|
?.[nextIndex]?.scrollIntoView({ block: 'nearest' });
|
||||||
|
return nextIndex;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (event.key === 'ArrowUp') {
|
if (event.key === 'ArrowUp') {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
setHovered((current) => {
|
setHovered((current) => {
|
||||||
const nextIndex = current - 1 < 0 ? current : current - 1;
|
const nextIndex = current - 1 < 0 ? current : current - 1;
|
||||||
viewportRef.current
|
viewportRef.current
|
||||||
?.querySelectorAll('[data-list-item]')
|
?.querySelectorAll('[data-list-item]')
|
||||||
?.[nextIndex]?.scrollIntoView({ block: 'nearest' });
|
?.[nextIndex]?.scrollIntoView({ block: 'nearest' });
|
||||||
return nextIndex;
|
return nextIndex;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Group>
|
||||||
|
<ScrollArea.Autosize
|
||||||
|
viewportRef={viewportRef}
|
||||||
|
style={{
|
||||||
|
height: 150,
|
||||||
|
width: '90%',
|
||||||
|
borderRadius: 8,
|
||||||
}}
|
}}
|
||||||
/>
|
>
|
||||||
<ScrollArea viewportRef={viewportRef} h={150} w={'100%'}>
|
<Stack gap={0} align='center' display={'block'}>
|
||||||
<Stack gap={0} align='center'>
|
|
||||||
{items}
|
{items}
|
||||||
</Stack>
|
</Stack>
|
||||||
</ScrollArea>
|
</ScrollArea.Autosize>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Group>
|
</Group>
|
||||||
<Divider color='black' my='sm' />
|
<Divider color='black' my='sm' />
|
||||||
|
|||||||
Reference in New Issue
Block a user