diff --git a/next-tavla/app/(admin)/organizations/[id]/actions.ts b/next-tavla/app/(admin)/organizations/[id]/actions.ts new file mode 100644 index 000000000..5b5c502b0 --- /dev/null +++ b/next-tavla/app/(admin)/organizations/[id]/actions.ts @@ -0,0 +1,10 @@ +'use server' + +import { setOrganziationFooterInfo } from 'Admin/utils/firebase' +import { revalidatePath } from 'next/cache' +import { TOrganizationID } from 'types/settings' + +export async function setInfo(oid: TOrganizationID, info: string) { + await setOrganziationFooterInfo(info, oid) + revalidatePath('/') +} diff --git a/next-tavla/app/(admin)/organizations/[id]/components/Info.tsx b/next-tavla/app/(admin)/organizations/[id]/components/Info.tsx new file mode 100644 index 000000000..5f9eb45a7 --- /dev/null +++ b/next-tavla/app/(admin)/organizations/[id]/components/Info.tsx @@ -0,0 +1,58 @@ +'use client' + +import { Button } from '@entur/button' +import { TextField } from '@entur/form' +import { Heading2, LeadParagraph } from '@entur/typography' +import { TOrganization } from 'types/settings' +import { setInfo } from '../actions' +import { + TFormFeedback, + getFormFeedbackForError, + getFormFeedbackForField, +} from 'app/(admin)/utils' +import { FirebaseError } from 'firebase/app' +import { useFormState } from 'react-dom' + +function Info({ organization }: { organization: TOrganization }) { + const submit = async ( + previousState: TFormFeedback | undefined, + data: FormData, + ) => { + const info = data.get('info') as string + const oid = data.get('oid') as string + + try { + setInfo(oid, info) + } catch (e: unknown) { + if (e instanceof FirebaseError) { + return getFormFeedbackForError(e) + } + } + } + + const [state, action] = useFormState(submit, undefined) + + return ( +
+ Legg til informasjon + + Her kan du legge til informasjon som vil vises på alle tavlene + til organisasjonen. + +
+ + + + +
+ ) +} + +export { Info } diff --git a/next-tavla/app/(admin)/organizations/[id]/page.tsx b/next-tavla/app/(admin)/organizations/[id]/page.tsx index 49804019a..3223ef445 100644 --- a/next-tavla/app/(admin)/organizations/[id]/page.tsx +++ b/next-tavla/app/(admin)/organizations/[id]/page.tsx @@ -11,7 +11,7 @@ import { UploadLogo } from 'Admin/scenarios/Organization/components/UploadLogo' import { MemberAdministration } from 'Admin/scenarios/Organization/components/MemberAdministration' import { permanentRedirect } from 'next/navigation' import { getUserFromSessionCookie } from 'Admin/utils/formActions' -import { Info } from 'Admin/scenarios/Organization/components/Info' +import { Info } from './components/Info' initializeAdminApp() diff --git a/next-tavla/src/Admin/scenarios/Organization/components/Info/FooterInfoInput.tsx b/next-tavla/src/Admin/scenarios/Organization/components/Info/FooterInfoInput.tsx deleted file mode 100644 index 183e3a327..000000000 --- a/next-tavla/src/Admin/scenarios/Organization/components/Info/FooterInfoInput.tsx +++ /dev/null @@ -1,32 +0,0 @@ -'use client' -import { Button } from '@entur/button' -import { TextField } from '@entur/form' -import { Contrast } from 'Admin/components/Contrast' -import { ChangeEventHandler, useState } from 'react' -import { TOrganization } from 'types/settings' - -function FooterInfoInput({ organzation }: { organzation: TOrganization }) { - const [info, setOrgInfo] = useState(organzation.footer ?? '') - const setInfo: ChangeEventHandler = (e) => { - if (!e.target) return - setOrgInfo(e.target.value) - } - - return ( -
- - - - -
- ) -} - -export { FooterInfoInput } diff --git a/next-tavla/src/Admin/scenarios/Organization/components/Info/index.tsx b/next-tavla/src/Admin/scenarios/Organization/components/Info/index.tsx deleted file mode 100644 index 269b1a3f6..000000000 --- a/next-tavla/src/Admin/scenarios/Organization/components/Info/index.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Heading2, LeadParagraph } from '@entur/typography' -import { Contrast } from 'Admin/components/Contrast' -import { setOrganziationFooterInfo } from 'Admin/utils/firebase' -import { revalidatePath } from 'next/cache' -import { TOrganization } from 'types/settings' -import { FooterInfoInput } from './FooterInfoInput' - -function Info({ organization }: { organization: TOrganization }) { - const setOrganzationInfo = async (data: FormData) => { - 'use server' - - const info = data.get('info') as string - await setOrganziationFooterInfo(info, organization.id) - revalidatePath('/') - } - - return ( -
- - Legg til informasjon - - Her kan du legge til informasjon som vil vises på alle - tavlene til organisasjonen. - - - - - - ) -} - -export { Info } diff --git a/next-tavla/src/Admin/scenarios/Organization/components/Info/styles.module.css b/next-tavla/src/Admin/scenarios/Organization/components/Info/styles.module.css deleted file mode 100644 index 14dcfa948..000000000 --- a/next-tavla/src/Admin/scenarios/Organization/components/Info/styles.module.css +++ /dev/null @@ -1,5 +0,0 @@ -.infoForm { - display: flex; - gap: 0.5em; - height: 4rem; -}