diff --git a/apps/app-frontend/src/components/ui/instance_settings/SharingSettings.vue b/apps/app-frontend/src/components/ui/instance_settings/SharingSettings.vue index cd6fcb038e..8a870096c2 100644 --- a/apps/app-frontend/src/components/ui/instance_settings/SharingSettings.vue +++ b/apps/app-frontend/src/components/ui/instance_settings/SharingSettings.vue @@ -59,10 +59,7 @@ :unpublish="unpublishSharedInstance" /> - + diff --git a/apps/app-frontend/src/locales/en-US/index.json b/apps/app-frontend/src/locales/en-US/index.json index 66f9fe60c1..85f1397043 100644 --- a/apps/app-frontend/src/locales/en-US/index.json +++ b/apps/app-frontend/src/locales/en-US/index.json @@ -368,9 +368,18 @@ "app.instance.admonitions.shared-instance.review-header": { "message": "Review changes" }, + "app.instance.admonitions.shared-instance.review-update-button": { + "message": "Review update" + }, "app.instance.admonitions.shared-instance.reviewing-button": { "message": "Reviewing..." }, + "app.instance.admonitions.shared-instance.update-available-body": { + "message": "An update is required to play {name}. Please update to latest version to launch the game." + }, + "app.instance.admonitions.shared-instance.update-available-header": { + "message": "An update is available" + }, "app.instance.confirm-delete.admonition-body": { "message": "All data for your instance will be permanently deleted, including your worlds, configs, and all installed content." }, @@ -437,6 +446,9 @@ "app.instance.share.invite-modal.heading": { "message": "Share {name}" }, + "app.instance.share.invite-modal.user-limit-reached": { + "message": "This instance has reached the {limit}-user limit." + }, "app.instance.share.locked.empty-description-prefix": { "message": "You need to sign in as" }, @@ -455,6 +467,12 @@ "app.instance.share.locked.wrong-account-heading": { "message": "Wrong account" }, + "app.instance.share.members.empty": { + "message": "No users have joined yet" + }, + "app.instance.share.members.no-filter-results": { + "message": "No users match your filters." + }, "app.instance.share.remove-user-modal.effect-access": { "message": "They will no longer receive updates for this shared instance" }, @@ -485,6 +503,12 @@ "app.instance.share.sign-in.button": { "message": "Sign in" }, + "app.instance.share.unable-to-connect.description": { + "message": "The shared instances service is not accessible at the moment, please try again later" + }, + "app.instance.share.unable-to-connect.heading": { + "message": "Unable to connect" + }, "app.instance.share.unlink.body": { "message": "You must unlink this modpack to share your instance" }, @@ -1166,6 +1190,45 @@ "instance.server-modal.resource-pack": { "message": "Resource pack" }, + "instance.settings.sharing.active-invites.actions": { + "message": "Actions" + }, + "instance.settings.sharing.active-invites.code": { + "message": "Invite code" + }, + "instance.settings.sharing.active-invites.description": { + "message": "Anyone with one of these invite codes can join while it remains active." + }, + "instance.settings.sharing.active-invites.empty": { + "message": "There are no active invites." + }, + "instance.settings.sharing.active-invites.expires": { + "message": "Expires" + }, + "instance.settings.sharing.active-invites.revoke": { + "message": "Revoke invite" + }, + "instance.settings.sharing.active-invites.revoke-with-code": { + "message": "Revoke invite {code}" + }, + "instance.settings.sharing.active-invites.title": { + "message": "Active invites" + }, + "instance.settings.sharing.active-invites.uses": { + "message": "Uses" + }, + "instance.settings.sharing.revoke-invite.admonition-body": { + "message": "The invite code {code} will stop working immediately. People who already joined will keep access." + }, + "instance.settings.sharing.revoke-invite.admonition-header": { + "message": "This action cannot be undone" + }, + "instance.settings.sharing.revoke-invite.confirm": { + "message": "Revoke invite" + }, + "instance.settings.sharing.revoke-invite.header": { + "message": "Revoke invite" + }, "instance.settings.tabs.general": { "message": "General" }, @@ -1367,6 +1430,12 @@ "instance.shared-instance.error.title": { "message": "Something has gone wrong" }, + "instance.shared-instance.network-error.text": { + "message": "Unable to connect to shared instances API" + }, + "instance.shared-instance.network-error.title": { + "message": "Network error" + }, "instance.shared-instance.owner-tooltip": { "message": "This instance's content is being shared to other users." }, diff --git a/apps/app-frontend/src/pages/instance/Index.vue b/apps/app-frontend/src/pages/instance/Index.vue index c8a914a3b8..9d3f10200d 100644 --- a/apps/app-frontend/src/pages/instance/Index.vue +++ b/apps/app-frontend/src/pages/instance/Index.vue @@ -572,10 +572,7 @@ function hideAcceptedSharedInstanceUpdate() { } function handleSharedInstanceUpdateComplete(successful: boolean) { - if ( - !successful && - hiddenSharedInstanceUpdateKey.value === sharedInstanceUpdateKey.value - ) { + if (!successful && hiddenSharedInstanceUpdateKey.value === sharedInstanceUpdateKey.value) { hiddenSharedInstanceUpdateKey.value = null } } diff --git a/apps/app-frontend/src/pages/instance/share/index.vue b/apps/app-frontend/src/pages/instance/share/index.vue index 3aededf19e..0a86cc3b4f 100644 --- a/apps/app-frontend/src/pages/instance/share/index.vue +++ b/apps/app-frontend/src/pages/instance/share/index.vue @@ -440,14 +440,11 @@ watch( }, { immediate: true }, ) -watch( - [eligibilityQuery.data, members.query.data], - ([eligibility, memberRows]) => { - if (eligibility !== undefined && memberRows !== undefined) { - sharedInstancesApiUnavailable.value = false - } - }, -) +watch([eligibilityQuery.data, members.query.data], ([eligibility, memberRows]) => { + if (eligibility !== undefined && memberRows !== undefined) { + sharedInstancesApiUnavailable.value = false + } +}) watch( () => props.instance.id, () => { diff --git a/apps/app-frontend/src/pages/instance/share/shared-instance-members-table.vue b/apps/app-frontend/src/pages/instance/share/shared-instance-members-table.vue index e01a23fde2..5c21c99ad0 100644 --- a/apps/app-frontend/src/pages/instance/share/shared-instance-members-table.vue +++ b/apps/app-frontend/src/pages/instance/share/shared-instance-members-table.vue @@ -68,9 +68,7 @@ @@ -197,9 +195,7 @@ const methodFilterOptions: Array<{ id: ShareMethod; label: string }> = [ { id: 'direct', label: methodLabels.direct }, { id: 'link', label: methodLabels.link }, ] -const hasMultipleMethods = computed( - () => new Set(props.rows.map((row) => row.method)).size > 1, -) +const hasMultipleMethods = computed(() => new Set(props.rows.map((row) => row.method)).size > 1) const columns = computed[]>(() => { const result: TableColumn[] = [ { diff --git a/packages/ui/src/locales/en-US/index.json b/packages/ui/src/locales/en-US/index.json index e4534c0512..cebb1825c7 100644 --- a/packages/ui/src/locales/en-US/index.json +++ b/packages/ui/src/locales/en-US/index.json @@ -5120,6 +5120,9 @@ "sharing.invite-players-modal.already-invited": { "defaultMessage": "This user has already been invited." }, + "sharing.invite-players-modal.apply-button": { + "defaultMessage": "Apply" + }, "sharing.invite-players-modal.avatar-alt": { "defaultMessage": "{username}'s avatar" }, @@ -5129,12 +5132,36 @@ "sharing.invite-players-modal.cancel-button": { "defaultMessage": "Cancel" }, + "sharing.invite-players-modal.custom-expiry": { + "defaultMessage": "Custom..." + }, + "sharing.invite-players-modal.custom-expiry-value": { + "defaultMessage": "Custom: {date}" + }, "sharing.invite-players-modal.edit-invite-link": { "defaultMessage": "Edit invite link." }, "sharing.invite-players-modal.edit-invite-link-title": { "defaultMessage": "Edit invite link" }, + "sharing.invite-players-modal.expiry-in-one-day": { + "defaultMessage": "In 1 day" + }, + "sharing.invite-players-modal.expiry-in-one-hour": { + "defaultMessage": "In 1 hour" + }, + "sharing.invite-players-modal.expiry-in-seven-days": { + "defaultMessage": "In 7 days" + }, + "sharing.invite-players-modal.expiry-in-six-hours": { + "defaultMessage": "In 6 hours" + }, + "sharing.invite-players-modal.expiry-in-three-days": { + "defaultMessage": "In 3 days" + }, + "sharing.invite-players-modal.expiry-in-twelve-hours": { + "defaultMessage": "In 12 hours" + }, "sharing.invite-players-modal.expiry-label": { "defaultMessage": "Expiry date" },