Skip to content

Commit 2fac481

Browse files
committed
remix-ts: wip
1 parent 78d2a9a commit 2fac481

File tree

7 files changed

+43
-32
lines changed

7 files changed

+43
-32
lines changed

examples/nextjs-app/app/components/AppShellBar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export function AppShellBar() {
6666
className={classes.popover}
6767
open={popoverOpen}
6868
opener={popoverOpenerRef.current}
69-
onClose={(e) => {
69+
onClose={() => {
7070
setPopoverOpen(false);
7171
}}
7272
>

examples/nextjs-app/app/components/TodoList.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import { Todo } from '@/app/mockData/todos';
33
import { List, ListPropTypes, ListItemStandard } from '@ui5/webcomponents-react';
44
import { useRouter } from 'next/navigation';
5-
65
import ListItemType from '@ui5/webcomponents/dist/types/ListItemType.js';
76
import ValueState from '@ui5/webcomponents-base/dist/types/ValueState.js';
87

examples/remix-ts/app/components/AppShellBar.tsx

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@ import paletteIcon from '@ui5/webcomponents-icons/dist/palette.js';
33
import {
44
Button,
55
List,
6-
ListMode,
76
ListPropTypes,
87
ResponsivePopover,
9-
ResponsivePopoverDomRef,
108
ShellBar,
119
ShellBarItem,
1210
ShellBarItemPropTypes,
13-
StandardListItem
11+
ListItemStandard,
12+
ButtonDomRef
1413
} from '@ui5/webcomponents-react';
1514
import { useRef, useState } from 'react';
1615
import classes from './AppShellBar.module.css';
1716
import { getTheme, setTheme } from '@ui5/webcomponents-base/dist/config/Theme.js';
1817
import { useLocation, useNavigate } from '@remix-run/react';
18+
import ListMode from '@ui5/webcomponents/dist/types/ListSelectionMode.js';
1919

2020
const THEMES = [
2121
{ key: 'sap_horizon', value: 'Morning Horizon (Light)' },
@@ -27,15 +27,17 @@ const THEMES = [
2727
export function AppShellBar() {
2828
const navigate = useNavigate();
2929
const { pathname } = useLocation();
30-
const popoverRef = useRef<ResponsivePopoverDomRef | null>(null);
30+
const popoverOpenerRef = useRef<ButtonDomRef | undefined>(undefined);
31+
const [popoverOpen, setPopoverOpen] = useState(false);
3132
const [currentTheme, setCurrentTheme] = useState(getTheme);
3233

3334
const handleThemeSwitchItemClick: ShellBarItemPropTypes['onClick'] = (e) => {
34-
popoverRef.current?.showAt(e.detail.targetRef);
35+
popoverOpenerRef.current = e.detail.targetRef as ButtonDomRef;
36+
setPopoverOpen(true);
3537
};
3638
const handleThemeSwitch: ListPropTypes['onSelectionChange'] = (e) => {
3739
const { targetItem } = e.detail;
38-
setTheme(targetItem.dataset.key!);
40+
void setTheme(targetItem.dataset.key!);
3941
setCurrentTheme(targetItem.dataset.key!);
4042
};
4143

@@ -57,12 +59,19 @@ export function AppShellBar() {
5759
>
5860
<ShellBarItem icon={paletteIcon} text="Change Theme" onClick={handleThemeSwitchItemClick} />
5961
</ShellBar>
60-
<ResponsivePopover ref={popoverRef} className={classes.popover}>
61-
<List onSelectionChange={handleThemeSwitch} headerText="Change Theme" mode={ListMode.SingleSelect}>
62+
<ResponsivePopover
63+
className={classes.popover}
64+
open={popoverOpen}
65+
opener={popoverOpenerRef.current}
66+
onClose={() => {
67+
setPopoverOpen(false);
68+
}}
69+
>
70+
<List onSelectionChange={handleThemeSwitch} headerText="Change Theme" selectionMode={ListMode.Single}>
6271
{THEMES.map((theme) => (
63-
<StandardListItem key={theme.key} selected={currentTheme === theme.key} data-key={theme.key}>
72+
<ListItemStandard key={theme.key} selected={currentTheme === theme.key} data-key={theme.key}>
6473
{theme.value}
65-
</StandardListItem>
74+
</ListItemStandard>
6675
))}
6776
</List>
6877
</ResponsivePopover>

examples/remix-ts/app/components/TodoList.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { useNavigate } from '@remix-run/react';
2-
import { List, ListItemType, ListPropTypes, StandardListItem, ValueState } from '@ui5/webcomponents-react';
2+
import { List, ListPropTypes, ListItemStandard } from '@ui5/webcomponents-react';
33
import { Todo } from '~/mockData/todos';
4+
import ListItemType from '@ui5/webcomponents/dist/types/ListItemType.js';
5+
import ValueState from '@ui5/webcomponents-base/dist/types/ValueState.js';
46

57
interface TodoListProps {
68
items: Todo[];
@@ -16,15 +18,15 @@ export function TodoList({ items }: TodoListProps) {
1618
<List onItemClick={handleTodoClick}>
1719
{items.map((todo) => {
1820
return (
19-
<StandardListItem
21+
<ListItemStandard
2022
key={todo.id}
2123
data-id={todo.id}
2224
type={ListItemType.Navigation}
2325
additionalText={`${!todo.completed ? 'Not ' : ''}Completed`}
24-
additionalTextState={todo.completed ? ValueState.Success : ValueState.None}
26+
additionalTextState={todo.completed ? ValueState.Positive : ValueState.None}
2527
>
2628
{todo.title}
27-
</StandardListItem>
29+
</ListItemStandard>
2830
);
2931
})}
3032
</List>

examples/remix-ts/app/globals.css

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ body {
1212
}
1313

1414
.appShell {
15-
height: 100vh;
16-
width: 100vw;
17-
overflow: hidden;
15+
height: 100vh;
16+
width: 100vw;
17+
overflow: hidden;
1818
}
1919

2020
.appScrollContainer {
21-
height: calc(100vh - 3.25rem);
22-
width: 100vw;
23-
overflow-y: auto;
24-
position: relative;
25-
}
21+
height: calc(100vh - 3.25rem);
22+
width: 100vw;
23+
overflow-y: auto;
24+
position: relative;
25+
}

examples/remix-ts/app/routes/_index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default function Index() {
2424
data: { todos }
2525
} = useLoaderData<typeof loader>();
2626
return (
27-
<Page header={<Bar startContent={<Title>My Todos</Title>} />}>
27+
<Page header={<Bar startContent={<Title wrappingType="None">My Todos</Title>} />} fixedFooter>
2828
<TodoList items={todos} />
2929
</Page>
3030
);

examples/remix-ts/app/routes/todos.$id.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ import {
77
Form,
88
FormItem,
99
Input,
10+
Label,
1011
MessageStrip,
11-
MessageStripDesign,
1212
Switch,
1313
TextArea
1414
} from '@ui5/webcomponents-react';
1515
import { Todo, todos } from '~/mockData/todos';
16+
import MessageStripDesign from '@ui5/webcomponents/dist/types/MessageStripDesign.js';
1617

1718
export const loader = async ({ params }: LoaderFunctionArgs) => {
1819
const todo = await new Promise<Todo | undefined>((resolve) => {
@@ -31,22 +32,22 @@ export default function TodoDetails() {
3132

3233
return (
3334
<>
34-
<DynamicPage showHideHeaderButton={false} headerTitle={<DynamicPageTitle header={todo?.title} />}>
35+
<DynamicPage titleArea={<DynamicPageTitle heading={todo?.title} />}>
3536
<MessageStrip design={MessageStripDesign.Information}>
3637
{`Since this is only a demo app, adjustments made here on this page won't be reflected in the todo list.`}
3738
</MessageStrip>
3839
<Form>
39-
<FormItem label={'Title'}>
40+
<FormItem labelContent={<Label wrappingType="None">Title</Label>}>
4041
<Input value={todo?.title} />
4142
</FormItem>
42-
<FormItem label={'Details'}>
43-
<TextArea value={todo?.details} growing growingMaxLines={10} />
43+
<FormItem labelContent={<Label wrappingType="None">Details</Label>}>
44+
<TextArea value={todo?.details} growing growingMaxRows={10} />
4445
</FormItem>
4546

46-
<FormItem label={'Due Date'}>
47+
<FormItem labelContent={<Label wrappingType="None">Due Date</Label>}>
4748
<DatePicker />
4849
</FormItem>
49-
<FormItem label={'Completed'}>
50+
<FormItem labelContent={<Label wrappingType="None">Completed</Label>}>
5051
<Switch checked={todo?.completed} />
5152
</FormItem>
5253
</Form>

0 commit comments

Comments
 (0)