feat(mobile): UI-03 forms and collaboration pages (09-12)
- Page 09 create: grouped form (Event details / Description & languages), required default-language selector, zh-CN/en tabs with per-locale title/description/venue/address, explicit timezone field, bottom save button kept keyboard-reachable, create mode has no Access tab - Page 10 edit: Details/Access tabs sharing one draft; Access has four switches with explanations; original downloads constrained by downloads (disabled + forced off in PATCH); unsaved-changes PopScope confirm; save commits all changes in one minimal PATCH - Page 11 members: Owner group + Collaborators list with initial avatars and per-row remove; full-width Invite colleague opens account-search bottom sheet (debounced prefix search, race guard, already-added state); remove confirm names the member - Page 12 categories: extracted to standalone page with per-row edit/ delete menu and New category sheet (language tabs + name + sort order); delete confirm mentions photo impact; collaborator browse-only; old inline section removed from album detail - l10n: new form/members/categories keys both locales; regenerated - tests: form 14, members 6, categories 7, detail nav 1; full suite green Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -211,18 +211,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get albumCreate => 'Create album';
|
||||
|
||||
@override
|
||||
String get albumEdit => 'Edit album';
|
||||
|
||||
@override
|
||||
String get albumSectionEventInfo => 'Event info';
|
||||
|
||||
@override
|
||||
String get albumSectionContent => 'Multilingual content';
|
||||
|
||||
@override
|
||||
String get albumSectionAccess => 'Access settings';
|
||||
|
||||
@override
|
||||
String get albumTitle => 'Title';
|
||||
|
||||
@@ -235,9 +223,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get albumAddress => 'Address';
|
||||
|
||||
@override
|
||||
String get albumDefaultLocale => 'Default locale';
|
||||
|
||||
@override
|
||||
String get albumStartAt => 'Start time';
|
||||
|
||||
@@ -253,18 +238,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get albumTimezoneInvalid => 'Invalid IANA timezone name';
|
||||
|
||||
@override
|
||||
String get switchUpload => 'Allow uploads';
|
||||
|
||||
@override
|
||||
String get switchPublic => 'Publicly visible';
|
||||
|
||||
@override
|
||||
String get switchDownload => 'Allow downloads';
|
||||
|
||||
@override
|
||||
String get switchOriginalDownload => 'Allow original downloads';
|
||||
|
||||
@override
|
||||
String get formStartAtRequired => 'Pick a start time';
|
||||
|
||||
@@ -278,6 +251,73 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get formEndAtNotAfterStartAt => 'End time must be after start time';
|
||||
|
||||
@override
|
||||
String get formEventDetails => 'Event details';
|
||||
|
||||
@override
|
||||
String get formDescriptionLanguages => 'Description & languages';
|
||||
|
||||
@override
|
||||
String get formDefaultLanguage => 'Default language';
|
||||
|
||||
@override
|
||||
String get formDetailsTab => 'Details';
|
||||
|
||||
@override
|
||||
String get formAccessTab => 'Access';
|
||||
|
||||
@override
|
||||
String get formAllowUploads => 'Allow uploads';
|
||||
|
||||
@override
|
||||
String get formAllowUploadsDesc =>
|
||||
'Allow staff to upload photos to this album';
|
||||
|
||||
@override
|
||||
String get formPublicAccess => 'Public access';
|
||||
|
||||
@override
|
||||
String get formPublicAccessDesc => 'Anyone with the link can view photos';
|
||||
|
||||
@override
|
||||
String get formAllowDownloads => 'Allow downloads';
|
||||
|
||||
@override
|
||||
String get formAllowDownloadsDesc =>
|
||||
'Viewers can download browse-quality photos';
|
||||
|
||||
@override
|
||||
String get formOriginalDownloads => 'Original downloads';
|
||||
|
||||
@override
|
||||
String get formOriginalDownloadsDesc =>
|
||||
'Viewers can download original photos';
|
||||
|
||||
@override
|
||||
String get createAlbumTitle => 'Create album';
|
||||
|
||||
@override
|
||||
String get createAlbumSubmit => 'Create album';
|
||||
|
||||
@override
|
||||
String get editAlbumTitle => 'Edit album';
|
||||
|
||||
@override
|
||||
String get saveChanges => 'Save changes';
|
||||
|
||||
@override
|
||||
String get unsavedChangesTitle => 'Discard changes?';
|
||||
|
||||
@override
|
||||
String get unsavedChangesBody =>
|
||||
'Your edits are not saved yet. Leaving now will discard them.';
|
||||
|
||||
@override
|
||||
String get discardChanges => 'Discard';
|
||||
|
||||
@override
|
||||
String get keepEditing => 'Keep editing';
|
||||
|
||||
@override
|
||||
String get create => 'Create';
|
||||
|
||||
@@ -309,7 +349,47 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get actionEdit => 'Edit';
|
||||
|
||||
@override
|
||||
String get albumMembers => 'Members';
|
||||
String get membersTitle => 'Members';
|
||||
|
||||
@override
|
||||
String membersTitleCount(int count) {
|
||||
return 'Members ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get ownerGroup => 'Owner';
|
||||
|
||||
@override
|
||||
String get collaboratorsGroup => 'Collaborators';
|
||||
|
||||
@override
|
||||
String get noCollaborators => 'No collaborators yet';
|
||||
|
||||
@override
|
||||
String get inviteColleague => 'Invite colleague';
|
||||
|
||||
@override
|
||||
String get alreadyAdded => 'Already added';
|
||||
|
||||
@override
|
||||
String get add => 'Add';
|
||||
|
||||
@override
|
||||
String get categoriesTitle => 'Categories';
|
||||
|
||||
@override
|
||||
String get newCategory => 'New category';
|
||||
|
||||
@override
|
||||
String get editCategory => 'Edit category';
|
||||
|
||||
@override
|
||||
String deleteCategoryConfirm(String name) {
|
||||
return 'Delete \"$name\"? Its photos will become uncategorized.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get noCategories => 'No categories yet';
|
||||
|
||||
@override
|
||||
String get albumCategories => 'Categories';
|
||||
@@ -323,19 +403,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get delete => 'Delete';
|
||||
|
||||
@override
|
||||
String get deleteConfirmCategory =>
|
||||
'Delete this category? Its photos will become uncategorized.';
|
||||
|
||||
@override
|
||||
String get categoryEmpty => 'No categories yet. Tap + to add one';
|
||||
|
||||
@override
|
||||
String get categoryAdd => 'Add category';
|
||||
|
||||
@override
|
||||
String get categoryEdit => 'Edit category';
|
||||
|
||||
@override
|
||||
String get categoryNameZh => 'Chinese name';
|
||||
|
||||
@@ -351,9 +418,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get categorySortOrderInvalid => 'Sort order must be an integer';
|
||||
|
||||
@override
|
||||
String get albumMembersEmpty => 'No members yet';
|
||||
|
||||
@override
|
||||
String get inviteSearchHint =>
|
||||
'Search by account prefix to invite (at least 2 characters)';
|
||||
@@ -361,9 +425,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get inviteNoResults => 'No matching users';
|
||||
|
||||
@override
|
||||
String get invite => 'Invite';
|
||||
|
||||
@override
|
||||
String get memberInvited => 'Invited';
|
||||
|
||||
@@ -371,7 +432,9 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
String get removeMember => 'Remove member';
|
||||
|
||||
@override
|
||||
String get removeMemberConfirm => 'Remove this member?';
|
||||
String removeMemberConfirm(String name) {
|
||||
return 'Remove $name from this album?';
|
||||
}
|
||||
|
||||
@override
|
||||
String get roleOwner => 'Owner';
|
||||
|
||||
Reference in New Issue
Block a user