Skip to content

Commit

Permalink
chore: Exchange gui actions with AC DialogActions component
Browse files Browse the repository at this point in the history
  • Loading branch information
mbacherycz committed Feb 27, 2025
1 parent 9de045d commit 6279f92
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 153 deletions.
2 changes: 1 addition & 1 deletion packages/frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"i18n:sort": "tsx ./src/i18n/check.ts --sort"
},
"dependencies": {
"@altinn/altinn-components": "^0.18.8",
"@altinn/altinn-components": "^0.19.1",
"@digdir/designsystemet-css": "1.0.0-next.50",
"@digdir/designsystemet-react": "1.0.0-next.50",
"@digdir/designsystemet-theme": "1.0.0-next.50",
Expand Down
4 changes: 2 additions & 2 deletions packages/frontend/src/api/useDialogById.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import type {
} from 'bff-types-generated';
import { AttachmentUrlConsumer } from 'bff-types-generated';
import { t } from 'i18next';
import type { GuiActionButtonProps } from '../components';
import type { DialogActionProps } from '../components/InboxItem/InboxItemDetail.tsx';
import { QUERY_KEYS } from '../constants/queryKeys.ts';
import { type ValueType, getPreferredPropertyByLocale } from '../i18n/property.ts';
import { useOrganizations } from '../pages/Inbox/useOrganizations.ts';
Expand Down Expand Up @@ -61,7 +61,7 @@ export interface DialogByIdDetails {
sender: Participant;
receiver: Participant;
title: string;
guiActions: GuiActionButtonProps[];
guiActions: DialogActionProps[];
additionalInfo: { value: string; mediaType: string } | undefined;
attachments: AttachmentFieldsFragment[];
dialogToken: string;
Expand Down
129 changes: 0 additions & 129 deletions packages/frontend/src/components/InboxItem/GuiActions.tsx

This file was deleted.

69 changes: 66 additions & 3 deletions packages/frontend/src/components/InboxItem/InboxItemDetail.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import {
Article,
type AttachmentLinkProps,
type DialogActionButtonProps,
DialogActions,
DialogAttachments,
DialogBody,
type DialogButtonPriority,
DialogHeader,
} from '@altinn/altinn-components';
import type { ReactElement } from 'react';
import { type ReactElement, useState } from 'react';
import { useTranslation } from 'react-i18next';
import type { DialogActivity, DialogByIdDetails, DialogTransmission } from '../../api/useDialogById.tsx';
import { getPreferredPropertyByLocale } from '../../i18n/property.ts';
Expand All @@ -15,7 +18,6 @@ import { Activity } from '../Activity';
import { AdditionalInfoContent } from '../AdditonalInfoContent';
import { MainContentReference } from '../MainContentReference';
import { Transmission } from '../Transmission';
import { GuiActions } from './GuiActions.tsx';
import styles from './inboxItemDetail.module.css';

interface InboxItemDetailProps {
Expand Down Expand Up @@ -47,6 +49,51 @@ interface InboxItemDetailProps {
* />
*/

export interface DialogActionProps {
id: string;
title: string;
url: string;
httpMethod: string;
prompt?: string;
disabled?: boolean;
priority: string;
}

const handleDialogActionClick = async (
props: DialogActionProps,
dialogToken: string,
responseFinished: () => void,
): Promise<void> => {
const { url, httpMethod, prompt } = props;

if (prompt && !window.confirm(prompt)) {
responseFinished();
return;
}

if (httpMethod === 'GET') {
responseFinished();
window.open(url, '_blank');
} else {
try {
const response = await fetch(url, {
method: httpMethod,
headers: {
Authorization: `Bearer ${dialogToken}`,
},
});

if (!response.ok) {
console.error(`Error: ${response.statusText}`);
}
} catch (error) {
console.error('Error performing action:', error);
} finally {
responseFinished();
}
}
};

export const InboxItemDetail = ({ dialog }: InboxItemDetailProps): ReactElement => {
const { t } = useTranslation();
const format = useFormat();
Expand Down Expand Up @@ -95,6 +142,22 @@ export const InboxItemDetail = ({ dialog }: InboxItemDetailProps): ReactElement
const formatString = clockPrefix ? `do MMMM yyyy '${clockPrefix}' HH.mm` : `do MMMM yyyy HH.mm`;
const dueAtLabel = dueAt ? format(dueAt, formatString) : '';

const [isLoading, setIsLoading] = useState<string>('');

const dialogActions: DialogActionButtonProps[] = guiActions.map((action) => ({
id: action.id,
label: action.title,
disabled: !!isLoading || action.disabled,
priority: action.priority.toLocaleLowerCase() as DialogButtonPriority,
url: action.url,
httpMethod: action.httpMethod,
loading: isLoading === action.id,
onClick: () => {
setIsLoading(action.id);
handleDialogActionClick(action, dialogToken, () => setIsLoading(''));
},
}));

return (
<Article padding={6} spacing={6}>
<DialogHeader dueAt={dueAt} dueAtLabel={dueAtLabel} status={getDialogStatus(status, t)} title={title} />
Expand All @@ -114,7 +177,7 @@ export const InboxItemDetail = ({ dialog }: InboxItemDetailProps): ReactElement
items={attachmentItems}
/>
)}
{guiActions.length > 0 && <GuiActions actions={guiActions} dialogToken={dialogToken} />}
<DialogActions items={dialogActions} />
</DialogBody>
<AdditionalInfoContent mediaType={additionalInfo?.mediaType} value={additionalInfo?.value} />
{activities.length > 0 && (
Expand Down
12 changes: 0 additions & 12 deletions packages/frontend/src/components/InboxItem/guiActions.module.css

This file was deleted.

1 change: 0 additions & 1 deletion packages/frontend/src/components/InboxItem/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
export * from './InboxItems.tsx';
export * from './InboxItemDetail.tsx';
export * from './GuiActions.tsx';
10 changes: 5 additions & 5 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6279f92

Please sign in to comment.