diff --git a/src/app/(main)/profile/ProfileSettings.tsx b/src/app/(main)/profile/ProfileSettings.tsx index 59f30fbe..f6b0a08b 100644 --- a/src/app/(main)/profile/ProfileSettings.tsx +++ b/src/app/(main)/profile/ProfileSettings.tsx @@ -11,7 +11,7 @@ import { ROLES } from 'lib/constants'; export function ProfileSettings() { const { user } = useLogin(); const { formatMessage, labels } = useMessages(); - const cloudMode = Boolean(process.env.cloudMode); + const cloudMode = !!process.env.cloudMode; if (!user) { return null; @@ -24,7 +24,7 @@ export function ProfileSettings() { return formatMessage(labels.user); } if (value === ROLES.admin) { - return formatMessage(labels.admin); + return formatMessage(labels.administrator); } if (value === ROLES.viewOnly) { return formatMessage(labels.viewOnly); diff --git a/src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx b/src/app/(main)/settings/teams/[teamId]/members/TeamMemberRemoveButton.tsx similarity index 100% rename from src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx rename to src/app/(main)/settings/teams/[teamId]/members/TeamMemberRemoveButton.tsx diff --git a/src/app/(main)/teams/[teamId]/settings/members/Members.tsx b/src/app/(main)/settings/teams/[teamId]/members/TeamMembers.tsx similarity index 55% rename from src/app/(main)/teams/[teamId]/settings/members/Members.tsx rename to src/app/(main)/settings/teams/[teamId]/members/TeamMembers.tsx index 28639981..34cb248c 100644 --- a/src/app/(main)/teams/[teamId]/settings/members/Members.tsx +++ b/src/app/(main)/settings/teams/[teamId]/members/TeamMembers.tsx @@ -1,15 +1,17 @@ 'use client'; -import TeamMembers from 'app/(main)/settings/teams/[teamId]/TeamMembers'; +import TeamMembersDataTable from './TeamMembersDataTable'; import PageHeader from 'components/layout/PageHeader'; import { useMessages } from 'components/hooks'; -export default function ({ teamId }: { teamId: string }) { +export function TeamMembers({ teamId }: { teamId: string }) { const { formatMessage, labels } = useMessages(); return ( <> - + ); } + +export default TeamMembers; diff --git a/src/app/(main)/settings/teams/[teamId]/TeamMembers.tsx b/src/app/(main)/settings/teams/[teamId]/members/TeamMembersDataTable.tsx similarity index 71% rename from src/app/(main)/settings/teams/[teamId]/TeamMembers.tsx rename to src/app/(main)/settings/teams/[teamId]/members/TeamMembersDataTable.tsx index 1fedc55f..ff95e522 100644 --- a/src/app/(main)/settings/teams/[teamId]/TeamMembers.tsx +++ b/src/app/(main)/settings/teams/[teamId]/members/TeamMembersDataTable.tsx @@ -3,7 +3,13 @@ import DataTable from 'components/common/DataTable'; import TeamMembersTable from './TeamMembersTable'; import { useTeamMembers } from 'components/hooks'; -export function TeamMembers({ teamId, allowEdit }: { teamId: string; allowEdit: boolean }) { +export function TeamMembersDataTable({ + teamId, + allowEdit = false, +}: { + teamId: string; + allowEdit?: boolean; +}) { const queryResult = useTeamMembers(teamId); return ( @@ -13,4 +19,4 @@ export function TeamMembers({ teamId, allowEdit }: { teamId: string; allowEdit: ); } -export default TeamMembers; +export default TeamMembersDataTable; diff --git a/src/app/(main)/settings/teams/[teamId]/TeamMembersTable.tsx b/src/app/(main)/settings/teams/[teamId]/members/TeamMembersTable.tsx similarity index 100% rename from src/app/(main)/settings/teams/[teamId]/TeamMembersTable.tsx rename to src/app/(main)/settings/teams/[teamId]/members/TeamMembersTable.tsx diff --git a/src/app/(main)/settings/teams/[teamId]/members/page.tsx b/src/app/(main)/settings/teams/[teamId]/members/page.tsx new file mode 100644 index 00000000..295b3f15 --- /dev/null +++ b/src/app/(main)/settings/teams/[teamId]/members/page.tsx @@ -0,0 +1,15 @@ +import TeamMembers from './TeamMembers'; +import TeamProvider from 'app/(main)/teams/[teamId]/TeamProvider'; +import { Metadata } from 'next'; + +export default function ({ params: { teamId } }) { + return ( + + + + ); +} + +export const metadata: Metadata = { + title: 'Team members - Umami', +}; diff --git a/src/app/(main)/settings/teams/[teamId]/TeamSettings.tsx b/src/app/(main)/settings/teams/[teamId]/team/Team.tsx similarity index 58% rename from src/app/(main)/settings/teams/[teamId]/TeamSettings.tsx rename to src/app/(main)/settings/teams/[teamId]/team/Team.tsx index 9ebfc973..18e0c014 100644 --- a/src/app/(main)/settings/teams/[teamId]/TeamSettings.tsx +++ b/src/app/(main)/settings/teams/[teamId]/team/Team.tsx @@ -6,13 +6,11 @@ import { ROLES } from 'lib/constants'; import Icons from 'components/icons'; import { useLogin, useMessages } from 'components/hooks'; import TeamEditForm from './TeamEditForm'; -import TeamMembers from './TeamMembers'; -import TeamWebsites from './TeamWebsites'; -import TeamData from './TeamData'; +import TeamAdmin from './TeamAdmin'; import LinkButton from 'components/common/LinkButton'; import { TeamContext } from 'app/(main)/teams/[teamId]/TeamProvider'; -export function TeamSettings({ teamId }: { teamId: string }) { +export function Team({ teamId }: { teamId: string }) { const team = useContext(TeamContext); const { formatMessage, labels } = useMessages(); const { user } = useLogin(); @@ -25,25 +23,23 @@ export function TeamSettings({ teamId }: { teamId: string }) { return ( }> - - - - - {formatMessage(labels.view)} - + {!canEdit && ( + + + + + {formatMessage(labels.leaveTeam)} + + )} setTab(value)} style={{ marginBottom: 30 }}> {formatMessage(labels.details)} - {formatMessage(labels.members)} - {formatMessage(labels.websites)} - {formatMessage(labels.data)} + {formatMessage(labels.admin)} {tab === 'details' && } - {tab === 'members' && } - {tab === 'websites' && } - {canEdit && tab === 'data' && } + {canEdit && tab === 'admin' && } ); } -export default TeamSettings; +export default Team; diff --git a/src/app/(main)/settings/teams/[teamId]/TeamData.tsx b/src/app/(main)/settings/teams/[teamId]/team/TeamAdmin.tsx similarity index 82% rename from src/app/(main)/settings/teams/[teamId]/TeamData.tsx rename to src/app/(main)/settings/teams/[teamId]/team/TeamAdmin.tsx index facee764..ff20989a 100644 --- a/src/app/(main)/settings/teams/[teamId]/TeamData.tsx +++ b/src/app/(main)/settings/teams/[teamId]/team/TeamAdmin.tsx @@ -1,9 +1,9 @@ 'use client'; import { ActionForm, Button, Modal, ModalTrigger } from 'react-basics'; import { useMessages } from 'components/hooks'; -import TeamDeleteForm from '../TeamDeleteForm'; +import TeamDeleteForm from './TeamDeleteForm'; -export function TeamData({ teamId }: { teamId: string }) { +export function TeamAdmin({ teamId }: { teamId: string }) { const { formatMessage, labels, messages } = useMessages(); return ( @@ -21,4 +21,4 @@ export function TeamData({ teamId }: { teamId: string }) { ); } -export default TeamData; +export default TeamAdmin; diff --git a/src/app/(main)/settings/teams/TeamDeleteForm.tsx b/src/app/(main)/settings/teams/[teamId]/team/TeamDeleteForm.tsx similarity index 100% rename from src/app/(main)/settings/teams/TeamDeleteForm.tsx rename to src/app/(main)/settings/teams/[teamId]/team/TeamDeleteForm.tsx diff --git a/src/app/(main)/settings/teams/[teamId]/TeamEditForm.tsx b/src/app/(main)/settings/teams/[teamId]/team/TeamEditForm.tsx similarity index 100% rename from src/app/(main)/settings/teams/[teamId]/TeamEditForm.tsx rename to src/app/(main)/settings/teams/[teamId]/team/TeamEditForm.tsx diff --git a/src/app/(main)/settings/teams/[teamId]/page.tsx b/src/app/(main)/settings/teams/[teamId]/team/page.tsx similarity index 53% rename from src/app/(main)/settings/teams/[teamId]/page.tsx rename to src/app/(main)/settings/teams/[teamId]/team/page.tsx index ef37b536..e23b670e 100644 --- a/src/app/(main)/settings/teams/[teamId]/page.tsx +++ b/src/app/(main)/settings/teams/[teamId]/team/page.tsx @@ -1,10 +1,15 @@ -import TeamSettings from './TeamSettings'; +import Team from './Team'; import TeamProvider from 'app/(main)/teams/[teamId]/TeamProvider'; +import { Metadata } from 'next'; export default function ({ params: { teamId } }) { return ( - + ); } + +export const metadata: Metadata = { + title: 'Teams Settings - Umami', +}; diff --git a/src/app/(main)/settings/teams/[teamId]/TeamWebsiteRemoveButton.tsx b/src/app/(main)/settings/teams/[teamId]/websites/TeamWebsiteRemoveButton.tsx similarity index 100% rename from src/app/(main)/settings/teams/[teamId]/TeamWebsiteRemoveButton.tsx rename to src/app/(main)/settings/teams/[teamId]/websites/TeamWebsiteRemoveButton.tsx diff --git a/src/app/(main)/settings/teams/[teamId]/websites/TeamWebsites.tsx b/src/app/(main)/settings/teams/[teamId]/websites/TeamWebsites.tsx new file mode 100644 index 00000000..36f8d39b --- /dev/null +++ b/src/app/(main)/settings/teams/[teamId]/websites/TeamWebsites.tsx @@ -0,0 +1,17 @@ +'use client'; +import TeamWebsitesDataTable from './TeamWebsitesDataTable'; +import PageHeader from 'components/layout/PageHeader'; +import { useMessages } from 'components/hooks'; + +export function TeamWebsites({ teamId }: { teamId: string }) { + const { formatMessage, labels } = useMessages(); + + return ( + <> + + + + ); +} + +export default TeamWebsites; diff --git a/src/app/(main)/settings/teams/[teamId]/TeamWebsites.tsx b/src/app/(main)/settings/teams/[teamId]/websites/TeamWebsitesDataTable.tsx similarity index 71% rename from src/app/(main)/settings/teams/[teamId]/TeamWebsites.tsx rename to src/app/(main)/settings/teams/[teamId]/websites/TeamWebsitesDataTable.tsx index 0bd49883..794ce948 100644 --- a/src/app/(main)/settings/teams/[teamId]/TeamWebsites.tsx +++ b/src/app/(main)/settings/teams/[teamId]/websites/TeamWebsitesDataTable.tsx @@ -3,7 +3,13 @@ import DataTable from 'components/common/DataTable'; import { useTeamWebsites } from 'components/hooks'; import TeamWebsitesTable from './TeamWebsitesTable'; -export function TeamWebsites({ teamId, allowEdit }: { teamId: string; allowEdit: boolean }) { +export function TeamWebsitesDataTable({ + teamId, + allowEdit = false, +}: { + teamId: string; + allowEdit?: boolean; +}) { const queryResult = useTeamWebsites(teamId); return ( @@ -13,4 +19,4 @@ export function TeamWebsites({ teamId, allowEdit }: { teamId: string; allowEdit: ); } -export default TeamWebsites; +export default TeamWebsitesDataTable; diff --git a/src/app/(main)/settings/teams/[teamId]/TeamWebsitesTable.tsx b/src/app/(main)/settings/teams/[teamId]/websites/TeamWebsitesTable.tsx similarity index 97% rename from src/app/(main)/settings/teams/[teamId]/TeamWebsitesTable.tsx rename to src/app/(main)/settings/teams/[teamId]/websites/TeamWebsitesTable.tsx index fdd0169a..0d54763e 100644 --- a/src/app/(main)/settings/teams/[teamId]/TeamWebsitesTable.tsx +++ b/src/app/(main)/settings/teams/[teamId]/websites/TeamWebsitesTable.tsx @@ -35,7 +35,7 @@ export function TeamWebsitesTable({ )} - + {formatMessage(labels.view)} diff --git a/src/app/(main)/settings/teams/[teamId]/websites/page.tsx b/src/app/(main)/settings/teams/[teamId]/websites/page.tsx new file mode 100644 index 00000000..31b02065 --- /dev/null +++ b/src/app/(main)/settings/teams/[teamId]/websites/page.tsx @@ -0,0 +1,15 @@ +import TeamWebsites from './TeamWebsites'; +import TeamProvider from 'app/(main)/teams/[teamId]/TeamProvider'; +import { Metadata } from 'next'; + +export default function ({ params: { teamId } }) { + return ( + + + + ); +} + +export const metadata: Metadata = { + title: 'Teams websites - Umami', +}; diff --git a/src/app/(main)/settings/users/UserAddForm.tsx b/src/app/(main)/settings/users/UserAddForm.tsx index 2781e743..0632165c 100644 --- a/src/app/(main)/settings/users/UserAddForm.tsx +++ b/src/app/(main)/settings/users/UserAddForm.tsx @@ -30,12 +30,12 @@ export function UserAddForm({ onSave, onClose }) { }); }; - const renderValue = value => { + const renderValue = (value: string) => { if (value === ROLES.user) { return formatMessage(labels.user); } if (value === ROLES.admin) { - return formatMessage(labels.admin); + return formatMessage(labels.administrator); } if (value === ROLES.viewOnly) { return formatMessage(labels.viewOnly); @@ -59,7 +59,7 @@ export function UserAddForm({ onSave, onClose }) { {formatMessage(labels.viewOnly)} {formatMessage(labels.user)} - {formatMessage(labels.admin)} + {formatMessage(labels.administrator)} diff --git a/src/app/(main)/settings/users/UserEditForm.tsx b/src/app/(main)/settings/users/UserEditForm.tsx index af2b7534..53384285 100644 --- a/src/app/(main)/settings/users/UserEditForm.tsx +++ b/src/app/(main)/settings/users/UserEditForm.tsx @@ -49,7 +49,7 @@ export function UserEditForm({ return formatMessage(labels.user); } if (value === ROLES.admin) { - return formatMessage(labels.admin); + return formatMessage(labels.administrator); } if (value === ROLES.viewOnly) { return formatMessage(labels.viewOnly); @@ -78,7 +78,7 @@ export function UserEditForm({ {formatMessage(labels.viewOnly)} {formatMessage(labels.user)} - {formatMessage(labels.admin)} + {formatMessage(labels.administrator)} diff --git a/src/app/(main)/teams/[teamId]/settings/members/page.tsx b/src/app/(main)/teams/[teamId]/settings/members/page.tsx index 04f89399..a4045ab4 100644 --- a/src/app/(main)/teams/[teamId]/settings/members/page.tsx +++ b/src/app/(main)/teams/[teamId]/settings/members/page.tsx @@ -1,5 +1,3 @@ -import Members from './Members'; +import Page from 'app/(main)/settings/teams/[teamId]/members/page'; -export default function ({ params: { teamId } }) { - return ; -} +export default Page; diff --git a/src/app/(main)/teams/[teamId]/settings/team/Team.tsx b/src/app/(main)/teams/[teamId]/settings/team/Team.tsx deleted file mode 100644 index 2da9c7a8..00000000 --- a/src/app/(main)/teams/[teamId]/settings/team/Team.tsx +++ /dev/null @@ -1,23 +0,0 @@ -'use client'; -import { useContext } from 'react'; -import { useLogin, useMessages } from 'components/hooks'; -import PageHeader from 'components/layout/PageHeader'; -import { ROLES } from 'lib/constants'; -import TeamEditForm from 'app/(main)/settings/teams/[teamId]/TeamEditForm'; -import { TeamContext } from 'app/(main)/teams/[teamId]/TeamProvider'; - -export default function Team({ teamId }: { teamId: string }) { - const team = useContext(TeamContext); - const { user } = useLogin(); - const { formatMessage, labels } = useMessages(); - const allowEdit = !!team?.teamUser?.find( - ({ userId, role }) => role === ROLES.teamOwner && userId === user.id, - ); - - return ( - <> - - - - ); -} diff --git a/src/app/(main)/teams/[teamId]/settings/team/page.tsx b/src/app/(main)/teams/[teamId]/settings/team/page.tsx index 19edd98c..c36e667c 100644 --- a/src/app/(main)/teams/[teamId]/settings/team/page.tsx +++ b/src/app/(main)/teams/[teamId]/settings/team/page.tsx @@ -1,5 +1,3 @@ -import Team from './Team'; +import Page from 'app/(main)/settings/teams/[teamId]/team/page'; -export default function ({ params: { teamId } }) { - return ; -} +export default Page; diff --git a/src/app/(main)/teams/[teamId]/settings/websites/[websiteId]/page.tsx b/src/app/(main)/teams/[teamId]/settings/websites/[websiteId]/page.tsx index ad1a97dd..224ff4d5 100644 --- a/src/app/(main)/teams/[teamId]/settings/websites/[websiteId]/page.tsx +++ b/src/app/(main)/teams/[teamId]/settings/websites/[websiteId]/page.tsx @@ -1,3 +1,3 @@ -import Page from 'app/(main)/settings/websites/[websiteId]/page'; +import Page from 'app/(main)/websites/[websiteId]/page'; export default Page; diff --git a/src/app/(main)/teams/[teamId]/settings/websites/page.tsx b/src/app/(main)/teams/[teamId]/settings/websites/page.tsx index 66290215..897c60fe 100644 --- a/src/app/(main)/teams/[teamId]/settings/websites/page.tsx +++ b/src/app/(main)/teams/[teamId]/settings/websites/page.tsx @@ -1,3 +1,3 @@ -import Page from 'app/(main)/settings/websites/page'; +import Page from 'app/(main)/settings/teams/[teamId]/websites/page'; export default Page; diff --git a/src/components/messages.ts b/src/components/messages.ts index 7bf9a1f7..19f60b46 100644 --- a/src/components/messages.ts +++ b/src/components/messages.ts @@ -17,7 +17,8 @@ export const labels = defineMessages({ role: { id: 'label.role', defaultMessage: 'Role' }, user: { id: 'label.user', defaultMessage: 'User' }, viewOnly: { id: 'label.view-only', defaultMessage: 'View only' }, - admin: { id: 'label.admin', defaultMessage: 'Administrator' }, + admin: { id: 'label.admin', defaultMessage: 'Admin' }, + administrator: { id: 'label.administrator', defaultMessage: 'Administrator' }, confirm: { id: 'label.confirm', defaultMessage: 'Confirm' }, details: { id: 'label.details', defaultMessage: 'Details' }, website: { id: 'label.website', defaultMessage: 'Website' }, diff --git a/src/index.ts b/src/index.ts index f067d2fa..2d7b6015 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,16 +1,21 @@ export * from 'components/hooks'; -export * from 'app/(main)/settings/teams/[teamId]/TeamData'; -export * from 'app/(main)/settings/teams/[teamId]/TeamEditForm'; -export * from 'app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton'; -export * from 'app/(main)/settings/teams/[teamId]/TeamMembers'; -export * from 'app/(main)/settings/teams/[teamId]/TeamMembersTable'; -export * from 'app/(main)/settings/teams/[teamId]/TeamSettings'; -export * from 'app/(main)/settings/teams/[teamId]/TeamWebsiteRemoveButton'; -export * from 'app/(main)/settings/teams/[teamId]/TeamWebsites'; -export * from 'app/(main)/settings/teams/[teamId]/TeamWebsitesTable'; +export * from 'app/(main)/settings/teams/[teamId]/members/TeamMemberRemoveButton'; +export * from 'app/(main)/settings/teams/[teamId]/members/TeamMembers'; +export * from 'app/(main)/settings/teams/[teamId]/members/TeamMembersDataTable'; +export * from 'app/(main)/settings/teams/[teamId]/members/TeamMembersTable'; + +export * from 'app/(main)/settings/teams/[teamId]/team/Team'; +export * from 'app/(main)/settings/teams/[teamId]/team/TeamAdmin'; +export * from 'app/(main)/settings/teams/[teamId]/team/TeamDeleteForm'; +export * from 'app/(main)/settings/teams/[teamId]/team/TeamEditForm'; + +export * from 'app/(main)/settings/teams/[teamId]/websites/TeamWebsiteRemoveButton'; +export * from 'app/(main)/settings/teams/[teamId]/websites/TeamWebsites'; +export * from 'app/(main)/settings/teams/[teamId]/websites/TeamWebsitesDataTable'; +export * from 'app/(main)/settings/teams/[teamId]/websites/TeamWebsitesTable'; + export * from 'app/(main)/settings/teams/TeamAddForm'; -export * from 'app/(main)/settings/teams/TeamDeleteForm'; export * from 'app/(main)/settings/teams/TeamsHeader'; export * from 'app/(main)/settings/teams/TeamJoinForm'; export * from 'app/(main)/settings/teams/TeamLeaveForm';