From 339b59d842f85ad32b370d393895b810ab2b5e4d Mon Sep 17 00:00:00 2001 From: Sagi Date: Sun, 6 Nov 2022 17:03:17 +0800 Subject: [PATCH 1/8] feature(message-box): add message box basic demo --- .../ui-vue/components/message-box/index.ts | 12 + .../message-box/src/message-box.component.tsx | 214 ++++++++++++++++-- packages/ui-vue/demos/message-box/basic.vue | 10 + packages/ui-vue/src/app.vue | 2 + packages/ui-vue/src/main.ts | 2 + 5 files changed, 217 insertions(+), 23 deletions(-) create mode 100644 packages/ui-vue/demos/message-box/basic.vue diff --git a/packages/ui-vue/components/message-box/index.ts b/packages/ui-vue/components/message-box/index.ts index e69de29bb2d..96558eda6e1 100644 --- a/packages/ui-vue/components/message-box/index.ts +++ b/packages/ui-vue/components/message-box/index.ts @@ -0,0 +1,12 @@ +import type { App } from 'vue'; +import FMessageBox from './src/message-box.component'; + +export * from './src/message-box.props'; + +export { FMessageBox }; + +export default { + install(app: App): void { + app.component(FMessageBox.name, FMessageBox); + } +}; diff --git a/packages/ui-vue/components/message-box/src/message-box.component.tsx b/packages/ui-vue/components/message-box/src/message-box.component.tsx index 3ab0fe7a654..0f7bb5990a8 100644 --- a/packages/ui-vue/components/message-box/src/message-box.component.tsx +++ b/packages/ui-vue/components/message-box/src/message-box.component.tsx @@ -14,10 +14,10 @@ export default defineComponent({ props: messageBoxProps, emits: [], setup(props: MessageBoxProps, context: SetupContext) { - const messageType = ref(''); - const messageIcon = ref(''); - const messageTitle = ref(''); - const messageDetail = ref(''); + const messageType = ref('info'); + const messageIcon = ref('f-icon-info'); + const messageTitle = ref('This title'); + const messageDetail = ref('Message Detail'); const exception = ref({} as ExceptionInfo); const happend = ref(''); const promptInputType = ref(''); @@ -198,9 +198,192 @@ export default defineComponent({ } - return () => { + function renderPropmt() { + return ( + <> + { + promptInputType.value === 'textarea' && +
+ +
+ } + { + promptInputType.value !== 'textarea' && +
+ +
+ } + + ); + } + + function renderCommonMessageDetail() { + return (

); + } + + function renderErrorMessageDetail() { + return ( +
+ {shouldShowExceptionDate.value &&
{exceptionDateMessage.value}
} + {shouldShowExceptionMessage.value && +
+ {exceptionMessageDetail.value}: +
+ } + { + shouldShowExpandHandle.value && + + { + expandExceptionMessage.value && + + {expandText.value} + + } + { + !expandExceptionMessage.value && + + {collapseText.value} + + } + + } +
+ ); + } + + function getMessageDetailRender(messageType: string) { + if (messageType === 'exception') { + return renderErrorMessageDetail; + } + return renderCommonMessageDetail; + } + + const renderMessageDetail = getMessageDetailRender(messageType.value); + + function renderContent() { + return ( + <> + + + + ); + } + + function renderDefaultButtons() { return ( <> + { + shouldShowCancelButton.value && + + } + { + shouldShowOkButton.value && + + } + + ); + } + + function renderCustomButtons() { + return ( + <> + { + buttons.value.map((button) => { + return ( + + ); + }) + } + + ); + } + + function getButtonRender() { + if (shouldShowButtons.value) { + return renderCustomButtons; + } + return renderDefaultButtons; + } + + const renderButtons = getButtonRender(); + + function renderFooter() { + return ( + <> + + + ); + } + + function render() { + return ( + <> +
+ { + messageType.value === 'prompt' ? renderPropmt() : renderContent() + } +
+ { + shouldShowWordCount.value && + + {wordsTotal.value + ' / ' + promptMaxLength.value} + + } + {renderFooter()} + { + exception.value && +
+ {messageDetail.value}: {exception.value?.message} +
+ } +
+
+ + ); + }; + + return () => { + return ( +
{ messageType.value !== 'prompt' &&
@@ -321,28 +504,13 @@ export default defineComponent({ } { exception.value && -
+
{messageDetail.value}: {exception.value?.message}
} -
+
- +
); }; } diff --git a/packages/ui-vue/demos/message-box/basic.vue b/packages/ui-vue/demos/message-box/basic.vue new file mode 100644 index 00000000000..1c54fa2fddb --- /dev/null +++ b/packages/ui-vue/demos/message-box/basic.vue @@ -0,0 +1,10 @@ + + diff --git a/packages/ui-vue/src/app.vue b/packages/ui-vue/src/app.vue index 001e9398d13..dd0fa1e2405 100644 --- a/packages/ui-vue/src/app.vue +++ b/packages/ui-vue/src/app.vue @@ -10,6 +10,7 @@ import ButtonEdit from './components/button-edit.vue'; import ButtonGroup from './components/button-group.vue'; import Checkbox from './components/checkbox.vue'; import ComboList from './components/combo-list.vue'; +import MessageBoxBasic from '../demos/message-box/basic.vue'; import Modal from './components/modal.vue'; import Notify from './components/notify.vue'; import Popover from './components/popover.vue'; @@ -28,6 +29,7 @@ const routes: Record = { '/button-group': ButtonGroup, '/checkbox': Checkbox, '/combo-list': ComboList, + '/message-box/basic': MessageBoxBasic, '/modal': Modal, '/notify': Notify, '/popover': Popover, diff --git a/packages/ui-vue/src/main.ts b/packages/ui-vue/src/main.ts index 7cba09d0e7b..bc1048c8fb8 100644 --- a/packages/ui-vue/src/main.ts +++ b/packages/ui-vue/src/main.ts @@ -6,6 +6,7 @@ import Avatar from '../components/avatar'; import Button from '../components/button'; import ButtonEdit from '../components/button-edit'; import ComboList from '../components/combo-list'; +import MessageBox from '../components/message-box'; import Modal from '../components/modal'; import Notify from '../components/notify'; import Popover from '../components/popover'; @@ -22,6 +23,7 @@ app.use(Accordion) .use(Button) .use(ButtonEdit) .use(ComboList) + .use(MessageBox) .use(Modal) .use(Notify) .use(Popover) -- Gitee From 4ef6bb973abab9d1bdcd72c947a92ba55f75fc1d Mon Sep 17 00:00:00 2001 From: Sagi Date: Sun, 6 Nov 2022 17:09:23 +0800 Subject: [PATCH 2/8] feature(message-box): add message box properties --- .../components/message-box/src/message-box.component.tsx | 6 +++--- .../ui-vue/components/message-box/src/message-box.props.ts | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/ui-vue/components/message-box/src/message-box.component.tsx b/packages/ui-vue/components/message-box/src/message-box.component.tsx index 0f7bb5990a8..139e6ca6af4 100644 --- a/packages/ui-vue/components/message-box/src/message-box.component.tsx +++ b/packages/ui-vue/components/message-box/src/message-box.component.tsx @@ -14,10 +14,10 @@ export default defineComponent({ props: messageBoxProps, emits: [], setup(props: MessageBoxProps, context: SetupContext) { - const messageType = ref('info'); + const messageType = ref(props.type); const messageIcon = ref('f-icon-info'); - const messageTitle = ref('This title'); - const messageDetail = ref('Message Detail'); + const messageTitle = ref(props.title); + const messageDetail = ref(props.detail); const exception = ref({} as ExceptionInfo); const happend = ref(''); const promptInputType = ref(''); diff --git a/packages/ui-vue/components/message-box/src/message-box.props.ts b/packages/ui-vue/components/message-box/src/message-box.props.ts index 9e79a38ec7a..8ef07d41478 100644 --- a/packages/ui-vue/components/message-box/src/message-box.props.ts +++ b/packages/ui-vue/components/message-box/src/message-box.props.ts @@ -1,4 +1,8 @@ import { ExtractPropTypes } from 'vue'; -export const messageBoxProps = {}; +export const messageBoxProps = { + type: { Type: String, default: 'info' }, + title: { Type: String, default: '' }, + detail: { Type: String, default: '' } +}; export type MessageBoxProps = ExtractPropTypes; -- Gitee From ddacb89c254abacfc26a4290304e83a81d127ca6 Mon Sep 17 00:00:00 2001 From: Sagi Date: Sun, 6 Nov 2022 18:11:39 +0800 Subject: [PATCH 3/8] fix(modal): support fit content --- .../ui-vue/components/modal/src/modal.component.tsx | 11 ++++++++++- packages/ui-vue/demos/message-box/basic.vue | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/ui-vue/components/modal/src/modal.component.tsx b/packages/ui-vue/components/modal/src/modal.component.tsx index e2a84dce949..5348fb6c4f4 100644 --- a/packages/ui-vue/components/modal/src/modal.component.tsx +++ b/packages/ui-vue/components/modal/src/modal.component.tsx @@ -52,6 +52,15 @@ export default defineComponent({ return modelValue.value; }); + const modalContainerClass = computed(() => { + const classObject = { + 'modal': true, + 'farris-modal': true + } as Record; + classObject['f-modal-fitContent'] = fitContent.value; + return classObject; + }); + const modalContainerStyle = computed(() => { const styleObject = { 'display': showModal.value ? 'block' : 'none' }; return styleObject; @@ -121,7 +130,7 @@ export default defineComponent({ return () => { return ( -