diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json index 88e79dd08..5f382a14b 100644 --- a/webapp/i18n/en.json +++ b/webapp/i18n/en.json @@ -446,6 +446,8 @@ "tutorial_tip.out": "Opt out of these tips.", "tutorial_tip.seen": "Seen this before?", "statusProperty.configDialog.title": "Edit Statuses", + "statusProperty.configDialog.inProgress.emptyText": "Drag statuses here to consider tasks with these statuses “in progress”", + "statusProperty.configDialog.complete.emptyText": "Drag statuses here to consider tasks with these statuses ”Done”", "statusProperty.configDialog.subTitle": "Categorise your status values to represent what each value represents", "generic.cancel": "Cancel", "generic.save": "Save" diff --git a/webapp/src/components/shareBoard/shareBoardButton.tsx b/webapp/src/components/shareBoard/shareBoardButton.tsx index 15849ee39..03144fcaa 100644 --- a/webapp/src/components/shareBoard/shareBoardButton.tsx +++ b/webapp/src/components/shareBoard/shareBoardButton.tsx @@ -16,6 +16,10 @@ import {BoardTypeOpen} from '../../blocks/board' import './shareBoardButton.scss' +import ClockOutline from '../../widgets/icons/clockOutline' + +import CheckIcon from '../../widgets/icons/check' + import ShareBoardDialog from './shareBoard' type Props = { @@ -41,6 +45,11 @@ const ShareBoardButton = (props: Props) => { {id: '1', value: 'TODO', color: 'propColorYellow'}, {id: '1', value: 'Pending Specs', color: 'propColorGray'}, ], + emptyState: { + icon: (
), + color: '#FF0000', + text: ({'Hello world'}), + }, }, { id: '2', @@ -63,15 +72,36 @@ const ShareBoardButton = (props: Props) => { {id: '1', value: 'Awaiting Cherrypick Awaiting Cherrypick Awaiting Cherrypick Awaiting Cherrypick Awaiting Cherrypick', color: 'propColorOrange'}, {id: '1', value: 'Awaiting Cherrypick Awaiting Cherrypick Awaiting Cherrypick Awaiting Cherrypick Awaiting Cherrypick', color: 'propColorOrange'}, ], + emptyState: { + icon: (), + color: '--away-indicator-rgb', + text: ( + + ), + }, }, { id: '3', title: 'Completed', options: [ - {id: '1', value: 'Done', color: 'propColorPink'}, - {id: '1', value: 'Branch Cut', color: 'propColorGreen'}, - {id: '1', value: 'Released', color: 'propColorDefault'}, + + // {id: '1', value: 'Done', color: 'propColorPink'}, + // {id: '1', value: 'Branch Cut', color: 'propColorGreen'}, + // {id: '1', value: 'Released', color: 'propColorDefault'}, ], + emptyState: { + icon: (), + color: '--online-indicator-rgb', + text: ( + + ), + }, }, ] diff --git a/webapp/src/components/standardProperties/statusProperty/editStatusDialog.scss b/webapp/src/components/standardProperties/statusProperty/editStatusDialog.scss index b79cef8dd..7d653374c 100644 --- a/webapp/src/components/standardProperties/statusProperty/editStatusDialog.scss +++ b/webapp/src/components/standardProperties/statusProperty/editStatusDialog.scss @@ -81,6 +81,33 @@ margin-top: 3px; } } + + .emptyColumnPlaceholder { + margin: 0 16px; + text-align: center; + display: flex; + flex-direction: column; + gap: 8px; + padding: 6px 0; + + .icon-wrapper { + width: 40px; + height: 40px; + border-radius: 50%; + margin: 0 auto; + padding-top: 7px; + + .CompassIcon { + font-size: 18px; + opacity: 1; + display: block; + height: 18px; + } + } + } } } -} \ No newline at end of file +} + + + diff --git a/webapp/src/components/standardProperties/statusProperty/editStatusDialog.tsx b/webapp/src/components/standardProperties/statusProperty/editStatusDialog.tsx index bc2ae64d4..14a9ae93b 100644 --- a/webapp/src/components/standardProperties/statusProperty/editStatusDialog.tsx +++ b/webapp/src/components/standardProperties/statusProperty/editStatusDialog.tsx @@ -14,10 +14,17 @@ import Label from '../../../widgets/label' import {IPropertyOption} from '../../../blocks/board' import DragHandle from '../../../widgets/icons/dragHandle' +export type StatusCategoryEmptyState = { + icon: JSX.Element + color: string + text: JSX.Element +} + export type StatusCategory = { id: string title: string options: IPropertyOption[] + emptyState: StatusCategoryEmptyState } type Props = { @@ -53,6 +60,25 @@ const EditStatusPropertyDialog = (props: Props): JSX.Element => { ) } + const generateEmptyColumnPlaceholder = (categoryEmptyState: StatusCategoryEmptyState): JSX.Element => { + return ( +
+
+ {categoryEmptyState.icon} +
+
+ {categoryEmptyState.text} +
+
+ ) + } + return ( {
- {valueCategory.options.map((option) => generateValueRow(option))} + { + valueCategory.options.length === 0 && + generateEmptyColumnPlaceholder(valueCategory.emptyState) + } + { + valueCategory.options.length > 0 && + valueCategory.options.map((option) => generateValueRow(option)) + }