@cnamts/synapse 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DateFilter-BlOpwEVq.js → DateFilter-CHDLz2EO.js} +1 -1
- package/dist/{NumberFilter-BPUXE4wY.js → NumberFilter-DXNQ4Uls.js} +1 -1
- package/dist/{PeriodFilter-B2yx329_.js → PeriodFilter-C8Qf3Jcn.js} +1 -1
- package/dist/{SelectFilter-CedKn1oV.js → SelectFilter-B2Ejs4Cb.js} +1 -1
- package/dist/{TextFilter-DkhJjRtR.js → TextFilter-CfR5_A1S.js} +1 -1
- package/dist/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.d.ts +116 -0
- package/dist/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
- package/dist/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.d.ts +220 -0
- package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.d.ts +68 -0
- package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.d.ts +70 -0
- package/dist/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.d.ts +204 -0
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +26 -26
- package/dist/components/Amelipro/AmeliproBadge/AmeliproBadge.d.ts +59 -0
- package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +214 -0
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +70 -0
- package/dist/components/Amelipro/AmeliproCarousel/types.d.ts +7 -0
- package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +125 -0
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproResultList/AmeliproResultList.d.ts +164 -0
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +27 -27
- package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproTable/AmeliproTable.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +32 -32
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +6 -6
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +7 -7
- package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproTooltips/AmeliproTooltips.d.ts +2 -2
- package/dist/components/ChipList/ChipList.d.ts +4 -0
- package/dist/components/ChipList/locales.d.ts +4 -2
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +8 -8
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +445 -8
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +2 -0
- package/dist/components/Customs/SyTabs/SyTabs.d.ts +71 -0
- package/dist/components/Customs/SyTabs/config.d.ts +17 -0
- package/dist/components/Customs/SyTabs/types.d.ts +11 -0
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +9 -9
- package/dist/components/DataList/DataList.d.ts +1 -1
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +4811 -240
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +52 -33
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +23 -10
- package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +1 -0
- package/dist/components/DatePicker/composables/useTodayButton.d.ts +1 -0
- package/dist/components/DialogBox/DialogBox.d.ts +219 -0
- package/dist/components/HeaderLoading/HeaderLoading.d.ts +27 -0
- package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +110 -3
- package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +19 -1
- package/dist/components/LangBtn/LangBtn.d.ts +2 -2
- package/dist/components/NirField/NirField.d.ts +18 -18
- package/dist/components/PeriodField/PeriodField.d.ts +10766 -1620
- package/dist/components/PhoneField/PhoneField.d.ts +1866 -2
- package/dist/components/PhoneField/indicatifs.d.ts +1 -0
- package/dist/components/PhoneField/locales.d.ts +1 -0
- package/dist/components/RangeField/RangeField.d.ts +1 -1
- package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +1 -1
- package/dist/components/SubHeader/SubHeader.d.ts +8 -0
- package/dist/components/SubHeader/locales.d.ts +1 -0
- package/dist/components/SyTextArea/SyTextArea.d.ts +6 -6
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
- package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
- package/dist/components/Tables/common/SyTablePagination.d.ts +448 -7
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +2 -2
- package/dist/components/Tables/common/types.d.ts +2 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/design-system-v3.js +173 -164
- package/dist/design-system-v3.umd.cjs +288 -261
- package/dist/{main-BXPFSAB4.js → main-C66C1BkG.js} +12984 -11291
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/assets/amelipro/icons.ts +38 -11
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.mdx +20 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.stories.ts +135 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.vue +107 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/AmeliproAccordionGroup.spec.ts +37 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/__snapshots__/AmeliproAccordionGroup.spec.ts.snap +513 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.mdx +16 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +300 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +288 -0
- package/src/components/Amelipro/AmeliproAccordionList/__tests__/AmeliproAccordionList.spec.ts +38 -0
- package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +1712 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.mdx +19 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.stories.ts +68 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.vue +66 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +145 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/AmeliproAccordionResultTemplate.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +127 -0
- package/src/components/Amelipro/AmeliproAccordionResult/__tests__/AmeliproAccordionResult.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +123 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.mdx +20 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +273 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +275 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/AmeliproAccordionResultList.spec.ts +38 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +1593 -0
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.mdx +15 -0
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.stories.ts +54 -0
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +76 -0
- package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +20 -0
- package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap +19 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.mdx +15 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.stories.ts +191 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +263 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.vue +93 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/AmeliproCarouselItem.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/__snapshots__/AmeliproCarouselItem.spec.ts.snap +43 -0
- package/src/components/Amelipro/AmeliproCarousel/__tests__/AmeliproCarousel.spec.ts +40 -0
- package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +342 -0
- package/src/components/Amelipro/AmeliproCarousel/types.d.ts +8 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.mdx +18 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +67 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +233 -0
- package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.spec.ts +21 -0
- package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +140 -0
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +7 -1
- package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +5 -4
- package/src/components/Amelipro/AmeliproIcon/iconList.ts +6 -0
- package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +5 -4
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.mdx +15 -0
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.stories.ts +264 -0
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +231 -0
- package/src/components/Amelipro/AmeliproResultList/__tests__/AmeliproResultList.spec.ts +37 -0
- package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +434 -0
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +6 -5
- package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +23 -26
- package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +2 -2
- package/src/components/ChipList/Accessibilite.stories.ts +4 -0
- package/src/components/ChipList/ChipList.vue +185 -42
- package/src/components/ChipList/locales.ts +4 -2
- package/src/components/ChipList/tests/chipList.spec.ts +7 -4
- package/src/components/Customs/Selects/SelectOverview.mdx +18 -15
- package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.stories.ts +10 -10
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +13 -5
- package/src/components/Customs/Selects/SySelect/SySelect.vue +108 -37
- package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +3 -1
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +165 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +28 -9
- package/src/components/Customs/SyTabs/Accessibilite.mdx +309 -0
- package/src/components/Customs/SyTabs/SyTabs.mdx +117 -0
- package/src/components/Customs/SyTabs/SyTabs.stories.ts +354 -0
- package/src/components/Customs/SyTabs/SyTabs.vue +350 -0
- package/src/components/Customs/SyTabs/config.ts +17 -0
- package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +425 -0
- package/src/components/Customs/SyTabs/types.ts +12 -0
- package/src/components/Customs/SyTextField/SyTextField.mdx +3 -0
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +142 -1
- package/src/components/Customs/SyTextField/SyTextField.vue +19 -16
- package/src/components/DataList/DataList.vue +47 -49
- package/src/components/DataListGroup/DataListGroup.vue +1 -1
- package/src/components/DataListItem/DataListItem.vue +67 -63
- package/src/components/DataListItem/tests/DataListItem.spec.ts +2 -2
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +3 -3
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +49 -13
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +412 -649
- package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +215 -0
- package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +218 -0
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.mdx +2 -0
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
- package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +218 -0
- package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +281 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +17 -4
- package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +111 -18
- package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +238 -6
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +716 -757
- package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +4 -4
- package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +17 -10
- package/src/components/DatePicker/composables/useDateInputEditing.ts +52 -22
- package/src/components/DatePicker/composables/useDisplayedDateString.ts +18 -4
- package/src/components/DatePicker/composables/useTodayButton.ts +13 -1
- package/src/components/DatePicker/utils/dateFormattingUtils.ts +79 -14
- package/src/components/DialogBox/DialogBox.stories.ts +12 -0
- package/src/components/DialogBox/DialogBox.vue +16 -11
- package/src/components/DialogBox/tests/DialogBox.spec.ts +22 -0
- package/src/components/HeaderLoading/Accessibilite.mdx +429 -8
- package/src/components/HeaderLoading/Accessibilite.stories.ts +4 -0
- package/src/components/HeaderLoading/HeaderLoading.vue +59 -0
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.mdx +17 -2
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +91 -2
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +37 -1
- package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +276 -21
- package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +2 -2
- package/src/components/NirField/NirField.mdx +3 -0
- package/src/components/NirField/NirField.vue +10 -1
- package/src/components/NirField/tests/NirField.spec.ts +81 -0
- package/src/components/PasswordField/PasswordField.mdx +3 -0
- package/src/components/PeriodField/PeriodField.mdx +2 -0
- package/src/components/PeriodField/PeriodField.stories.ts +195 -0
- package/src/components/PhoneField/Accessibilite.stories.ts +4 -0
- package/src/components/PhoneField/PhoneField.mdx +3 -1
- package/src/components/PhoneField/PhoneField.stories.ts +285 -1
- package/src/components/PhoneField/PhoneField.vue +228 -95
- package/src/components/PhoneField/indicatifs.ts +102 -102
- package/src/components/PhoneField/locales.ts +1 -0
- package/src/components/PhoneField/tests/PhoneField.spec.ts +429 -2
- package/src/components/SkipLink/SkipLink.vue +3 -31
- package/src/components/SkipLink/tests/skipLink.spec.ts +0 -21
- package/src/components/SubHeader/Accessibilite.stories.ts +8 -0
- package/src/components/SubHeader/SubHeader.mdx +1 -0
- package/src/components/SubHeader/SubHeader.stories.ts +179 -60
- package/src/components/SubHeader/SubHeader.vue +45 -15
- package/src/components/SubHeader/locales.ts +1 -0
- package/src/components/SyAlert/SyAlert.vue +6 -0
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +3 -10
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +242 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +29 -10
- package/src/components/Tables/SyTable/SyTable.mdx +3 -10
- package/src/components/Tables/SyTable/SyTable.stories.ts +242 -0
- package/src/components/Tables/SyTable/SyTable.vue +2 -0
- package/src/components/Tables/common/SyTablePagination.vue +13 -6
- package/src/components/Tables/common/tests/SyTablePagination.spec.ts +157 -0
- package/src/components/Tables/common/types.ts +2 -0
- package/src/components/index.ts +9 -0
- package/src/composables/useFilterable/useFilterable.ts +10 -0
- package/src/designTokens/tokens/amelipro/apColors.ts +1 -1
- package/src/designTokens/tokens/cnam/cnamSemantic.ts +3 -3
- package/src/stories/Components/Components.stories.ts +1 -1
- package/src/stories/GuideDuDev/FormValidationGuide.mdx +342 -0
- package/src/stories/Templates/Templates.stories.ts +1 -1
- package/src/utils/functions/ameliproColors/ameliproColors.ts +1 -1
- package/dist/components/DataList/locales.d.ts +0 -3
- package/src/components/DataList/locales.ts +0 -3
- package/src/components/PhoneField/tests/PhoneField.additional.spec.ts +0 -266
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { ref } from 'vue'
|
|
2
|
+
import { computed, ref } from 'vue'
|
|
3
3
|
import { mdiKeyboardBackspace } from '@mdi/js'
|
|
4
4
|
|
|
5
5
|
import { config } from './config'
|
|
@@ -8,26 +8,36 @@
|
|
|
8
8
|
import useCustomizableOptions, { type CustomizableOptions } from '@/composables/useCustomizableOptions'
|
|
9
9
|
import { useWidthable, type Widthable } from '@/composables/widthable'
|
|
10
10
|
|
|
11
|
+
import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
|
|
11
12
|
import DataListGroup from '../DataListGroup/DataListGroup.vue'
|
|
12
13
|
import HeaderLoading from '../HeaderLoading/HeaderLoading.vue'
|
|
13
14
|
import type { DataListActionEvent, DataListGroupItems } from '../DataListGroup/types'
|
|
15
|
+
import { VThemeProvider } from 'vuetify/components'
|
|
14
16
|
|
|
15
17
|
const props = withDefaults(defineProps<CustomizableOptions & Widthable & {
|
|
16
18
|
hideBackBtn?: boolean
|
|
17
19
|
backBtnText?: string
|
|
20
|
+
backBtnAccessibleName?: string
|
|
18
21
|
titleText?: string
|
|
22
|
+
titleAccessibleName?: string
|
|
19
23
|
subTitleText?: string
|
|
24
|
+
subTitleAccessibleName?: string
|
|
20
25
|
dataListGroupItems?: DataListGroupItems | undefined
|
|
21
26
|
loading?: boolean
|
|
22
27
|
renderHtmlValue?: boolean
|
|
28
|
+
renderFixedHeight?: boolean
|
|
23
29
|
}>(), {
|
|
24
30
|
hideBackBtn: false,
|
|
25
31
|
backBtnText: locales.backBtnText,
|
|
32
|
+
backBtnAccessibleName: undefined,
|
|
26
33
|
titleText: undefined,
|
|
34
|
+
titleAccessibleName: undefined,
|
|
27
35
|
subTitleText: undefined,
|
|
36
|
+
subTitleAccessibleName: undefined,
|
|
28
37
|
dataListGroupItems: undefined,
|
|
29
38
|
loading: false,
|
|
30
39
|
renderHtmlValue: false,
|
|
40
|
+
renderFixedHeight: false,
|
|
31
41
|
})
|
|
32
42
|
|
|
33
43
|
const options = useCustomizableOptions(config, props)
|
|
@@ -40,6 +50,13 @@
|
|
|
40
50
|
function emitItemAction(eventValue: DataListActionEvent) {
|
|
41
51
|
emit('click:list-item', eventValue)
|
|
42
52
|
}
|
|
53
|
+
|
|
54
|
+
// Add the accessible name of the back button only if the default button label has been filled in.
|
|
55
|
+
const effectiveBackBtnAccessibleName = computed(() => {
|
|
56
|
+
return props.backBtnAccessibleName ?? (
|
|
57
|
+
props.backBtnText === locales.backBtnText ? locales.backBtnAccessibleName : undefined
|
|
58
|
+
)
|
|
59
|
+
})
|
|
43
60
|
</script>
|
|
44
61
|
|
|
45
62
|
<template>
|
|
@@ -64,20 +81,29 @@
|
|
|
64
81
|
v-else
|
|
65
82
|
v-bind="options.backBtn"
|
|
66
83
|
class="vd-sub-header-back-btn mb-1"
|
|
84
|
+
:aria-label="effectiveBackBtnAccessibleName"
|
|
67
85
|
@click="$emit('back')"
|
|
68
86
|
>
|
|
69
87
|
<slot name="back-btn-icon">
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
|
|
88
|
+
<SyIcon
|
|
89
|
+
class="mr-2"
|
|
90
|
+
:icon="backArrowIcon"
|
|
91
|
+
:decorative="true"
|
|
92
|
+
/>
|
|
73
93
|
</slot>
|
|
74
94
|
{{ backBtnText }}
|
|
75
95
|
</VBtn>
|
|
76
96
|
</VFadeTransition>
|
|
77
97
|
</slot>
|
|
78
98
|
|
|
79
|
-
<div
|
|
80
|
-
|
|
99
|
+
<div
|
|
100
|
+
class="vd-sub-header-content d-flex justify-space-between flex-wrap ga-8"
|
|
101
|
+
:class="renderFixedHeight ? 'flex-nowrap flex-shrink-0' : 'flex-wrap'"
|
|
102
|
+
>
|
|
103
|
+
<div
|
|
104
|
+
class="vd-sub-header-informations d-flex flex-column mr-10"
|
|
105
|
+
:class="{ 'flex-shrink-0': renderFixedHeight }"
|
|
106
|
+
>
|
|
81
107
|
<slot name="title">
|
|
82
108
|
<VFadeTransition mode="out-in">
|
|
83
109
|
<HeaderLoading
|
|
@@ -89,6 +115,7 @@
|
|
|
89
115
|
<h2
|
|
90
116
|
v-else-if="titleText"
|
|
91
117
|
class="text-h5 font-weight-bold"
|
|
118
|
+
:aria-label="titleAccessibleName"
|
|
92
119
|
>
|
|
93
120
|
{{ titleText }}
|
|
94
121
|
</h2>
|
|
@@ -111,6 +138,7 @@
|
|
|
111
138
|
v-else
|
|
112
139
|
class="text-h6 font-weight-bold mt-1 mb-0"
|
|
113
140
|
:style="{ color: 'rgba(255, 255, 255, .7)' }"
|
|
141
|
+
:aria-label="subTitleAccessibleName"
|
|
114
142
|
>
|
|
115
143
|
{{ subTitleText }}
|
|
116
144
|
</p>
|
|
@@ -121,15 +149,17 @@
|
|
|
121
149
|
</div>
|
|
122
150
|
|
|
123
151
|
<slot name="right-content">
|
|
124
|
-
<
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
152
|
+
<VThemeProvider theme="dark">
|
|
153
|
+
<DataListGroup
|
|
154
|
+
v-if="dataListGroupItems"
|
|
155
|
+
:items="dataListGroupItems"
|
|
156
|
+
:loading="loading"
|
|
157
|
+
:render-html-value="renderHtmlValue"
|
|
158
|
+
item-width="auto"
|
|
159
|
+
:class="renderFixedHeight ? 'flex-nowrap flex-shrink-0' : 'flex-wrap'"
|
|
160
|
+
@click:list-item="emitItemAction"
|
|
161
|
+
/>
|
|
162
|
+
</VThemeProvider>
|
|
133
163
|
</slot>
|
|
134
164
|
</div>
|
|
135
165
|
</VSheet>
|
|
@@ -31,38 +31,33 @@ Pour gérer individuellement le stockage des options pour différents tableaux,
|
|
|
31
31
|
### Tri côté serveur
|
|
32
32
|
|
|
33
33
|
Le composant permet de trier les données par colonne en déléguant le tri au serveur.
|
|
34
|
-
<Canvas story={{height: '550px'}} of={SyServerTable.ServerSortBy} />
|
|
35
34
|
|
|
36
35
|
Le multi-tri est également supporté. Vous pouvez activer cette fonctionnalité en utilisant la prop `multi-sort`.
|
|
37
|
-
<Canvas story={{height: '550px'}} of={SyServerTable.ServerMultiSort} />
|
|
38
36
|
|
|
39
37
|
### Filtres des colonnes
|
|
40
38
|
|
|
41
39
|
Le composant permet d'appliquer des filtres sur les colonnes. Vous pouvez définir des filtres personnalisés pour chaque colonne en utilisant la prop `show-filters`. Voir d'autres exemples de filtres dans les stories.
|
|
42
|
-
<Canvas story={{height: '550px'}} of={SyServerTable.ServerFilterByText} />
|
|
43
40
|
|
|
44
41
|
### Resize des colonnes
|
|
45
42
|
|
|
46
43
|
Le composant peut permettre de redimensionner les colonnes en utilisant la prop `resizable-columns`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
|
|
47
|
-
<Canvas story={{height: '550px'}} of={SyServerTable.ResizableColumns} />
|
|
48
44
|
|
|
49
45
|
### Réorganisation des colonnes
|
|
50
46
|
|
|
51
47
|
Le composant permet de cacher ou réorganiser l'ordre des colonnes en utilisant la prop `enable-column-controls`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
|
|
52
|
-
<Canvas story={{height: '550px'}} of={SyServerTable.ColumnControls} />
|
|
53
48
|
|
|
54
49
|
### Selection des lignes
|
|
55
50
|
|
|
56
51
|
Le composant permet de sélectionner des lignes individuellement ou en masse. Vous pouvez activer la sélection en utilisant la prop `show-select`.
|
|
57
|
-
<Canvas story={{height: '550px'}} of={SyServerTable.RowSelection} />
|
|
58
52
|
|
|
59
53
|
### Slot item
|
|
60
54
|
Le composant permet de personnaliser l'affichage des contenus en utilisant le slot `item`. Vous pouvez définir la structure de chaque contenu en fonction de vos besoins.
|
|
61
|
-
<Canvas story={{height: '550px'}} of={SyServerTable.SlotItem} />
|
|
62
55
|
|
|
63
56
|
### Slot headers
|
|
64
57
|
Le composant permet de personnaliser l'affichage des en-têtes de colonnes en utilisant le slot `headers`. Vous pouvez définir la structure de chaque en-tête en fonction de vos besoins.
|
|
65
|
-
|
|
58
|
+
|
|
59
|
+
### Items par page options
|
|
60
|
+
Le composant permet de personnaliser le nombre possible d'éléments par page en utilisant la prop `items-per-page-options`. Vous pouvez spécifier un tableau d'options pour permettre de choisir le nombre d'éléments affichés par page.
|
|
66
61
|
|
|
67
62
|
### Accessibilité
|
|
68
63
|
|
|
@@ -169,8 +164,6 @@ Le composant améliore l'accessibilité en ajoutant automatiquement:
|
|
|
169
164
|
|
|
170
165
|
Pour utiliser plusieurs tableaux serveur sur une même page avec des options indépendantes, utilisez la prop `suffix` pour chaque tableau.
|
|
171
166
|
|
|
172
|
-
<Canvas of={SyServerTable.ManyServerTables} />
|
|
173
|
-
|
|
174
167
|
## Bonnes pratiques
|
|
175
168
|
|
|
176
169
|
- Utilisez la prop `serverItemsLength` pour indiquer le nombre total d'éléments disponibles côté serveur
|
|
@@ -74,6 +74,15 @@ const meta = {
|
|
|
74
74
|
type: { summary: 'DataOptions', detail: '{ page: number, itemsPerPage: number, sortBy: SortOptions[], groupBy?: SortOptions[], multiSort?: boolean, mustSort?: boolean, filters?: FilterOption[] }' },
|
|
75
75
|
},
|
|
76
76
|
},
|
|
77
|
+
itemsPerPageOptions: {
|
|
78
|
+
description: 'Limite les options disponibles dans le sélecteur "itemsPerPage"',
|
|
79
|
+
control: { type: 'object' },
|
|
80
|
+
table: {
|
|
81
|
+
category: 'props',
|
|
82
|
+
type: { summary: 'number[]' },
|
|
83
|
+
defaultValue: { summary: 'undefined' },
|
|
84
|
+
},
|
|
85
|
+
},
|
|
77
86
|
serverItemsLength: {
|
|
78
87
|
description: 'Nombre total d\'éléments à afficher',
|
|
79
88
|
control: { type: 'number' },
|
|
@@ -5219,3 +5228,236 @@ export const SlotHeaders: Story = {
|
|
|
5219
5228
|
}
|
|
5220
5229
|
},
|
|
5221
5230
|
}
|
|
5231
|
+
|
|
5232
|
+
export const ItemsPerPageOptions: Story = {
|
|
5233
|
+
parameters: {
|
|
5234
|
+
sourceCode: [
|
|
5235
|
+
{
|
|
5236
|
+
name: 'Template',
|
|
5237
|
+
code: `
|
|
5238
|
+
<template>
|
|
5239
|
+
<SyServerTable
|
|
5240
|
+
v-model:options="options"
|
|
5241
|
+
:items="users"
|
|
5242
|
+
:headers="headers"
|
|
5243
|
+
:items-per-page-options="[5, 10, 15]"
|
|
5244
|
+
:server-items-length="totalUsers"
|
|
5245
|
+
:loading="state === StateEnum.PENDING"
|
|
5246
|
+
suffix="server-default"
|
|
5247
|
+
@update:options="fetchData"
|
|
5248
|
+
/>
|
|
5249
|
+
</template>
|
|
5250
|
+
`,
|
|
5251
|
+
},
|
|
5252
|
+
{
|
|
5253
|
+
name: 'Script',
|
|
5254
|
+
code: `
|
|
5255
|
+
<script setup lang="ts">
|
|
5256
|
+
import { ref, watch } from 'vue'
|
|
5257
|
+
import { SyServerTable } from '@cnamts/synapse'
|
|
5258
|
+
import { StateEnum } from '@cnamts/synapse/src/components/Tables/common/constants/StateEnum'
|
|
5259
|
+
import type { DataOptions } from '@cnamts/synapse/src/components/Tables/common/types'
|
|
5260
|
+
|
|
5261
|
+
interface User {
|
|
5262
|
+
[key: string]: string
|
|
5263
|
+
firstname: string
|
|
5264
|
+
lastname: string
|
|
5265
|
+
email: string
|
|
5266
|
+
}
|
|
5267
|
+
|
|
5268
|
+
interface DataObj {
|
|
5269
|
+
items: User[]
|
|
5270
|
+
total: number
|
|
5271
|
+
}
|
|
5272
|
+
|
|
5273
|
+
const totalUsers = ref(0)
|
|
5274
|
+
const users = ref<User[]>([])
|
|
5275
|
+
const state = ref(StateEnum.IDLE)
|
|
5276
|
+
|
|
5277
|
+
const options = ref({
|
|
5278
|
+
itemsPerPage: 5,
|
|
5279
|
+
sortBy: [{ key: 'lastname', order: 'asc' }],
|
|
5280
|
+
page: 1,
|
|
5281
|
+
})
|
|
5282
|
+
|
|
5283
|
+
const headers = [
|
|
5284
|
+
{ title: 'Nom', key: 'lastname' },
|
|
5285
|
+
{ title: 'Prénom', key: 'firstname' },
|
|
5286
|
+
{ title: 'Email', key: 'email' },
|
|
5287
|
+
]
|
|
5288
|
+
|
|
5289
|
+
const fetchData = async (): Promise<void> => {
|
|
5290
|
+
const { items, total } = await getDataFromApi(options.value)
|
|
5291
|
+
users.value = items
|
|
5292
|
+
totalUsers.value = total
|
|
5293
|
+
}
|
|
5294
|
+
|
|
5295
|
+
const wait = async (ms: number) => {
|
|
5296
|
+
return new Promise(resolve => setTimeout(resolve, ms))
|
|
5297
|
+
}
|
|
5298
|
+
|
|
5299
|
+
const getDataFromApi = async ({ sortBy, page, itemsPerPage, filters }: DataOptions): Promise<DataObj> => {
|
|
5300
|
+
state.value = StateEnum.PENDING
|
|
5301
|
+
await wait(1000)
|
|
5302
|
+
|
|
5303
|
+
return new Promise((resolve) => {
|
|
5304
|
+
let items: User[] = getUsers()
|
|
5305
|
+
const total = items.length
|
|
5306
|
+
|
|
5307
|
+
if (sortBy && sortBy.length > 0) {
|
|
5308
|
+
items = items.sort((a, b) => {
|
|
5309
|
+
const key = sortBy[0].key
|
|
5310
|
+
const order = sortBy[0].order === 'asc' ? 1 : -1
|
|
5311
|
+
|
|
5312
|
+
return a[key] > b[key] ? order : -order
|
|
5313
|
+
})
|
|
5314
|
+
}
|
|
5315
|
+
|
|
5316
|
+
if (itemsPerPage > 0) {
|
|
5317
|
+
items = items.slice((page - 1) * itemsPerPage, page * itemsPerPage)
|
|
5318
|
+
}
|
|
5319
|
+
|
|
5320
|
+
resolve({ items, total })
|
|
5321
|
+
state.value = StateEnum.RESOLVED
|
|
5322
|
+
})
|
|
5323
|
+
}
|
|
5324
|
+
|
|
5325
|
+
const getUsers = (): User[] => {
|
|
5326
|
+
return [
|
|
5327
|
+
{ firstname: 'Virginie', lastname: 'Beauchesne', email: 'virginie.beauchesne@example.com' },
|
|
5328
|
+
{ firstname: 'Simone', lastname: 'Bellefeuille', email: 'simone.bellefeuille@example.com' },
|
|
5329
|
+
{ firstname: 'Étienne', lastname: 'Salois', email: 'etienne.salois@example.com' },
|
|
5330
|
+
{ firstname: 'Bernadette', lastname: 'Langelier', email: 'bernadette.langelier@example.com' },
|
|
5331
|
+
{ firstname: 'Agate', lastname: 'Roy', email: 'agate.roy@example.com' },
|
|
5332
|
+
{ firstname: 'Louis', lastname: 'Denis', email: 'louis.denis@example.com' },
|
|
5333
|
+
{ firstname: 'Édith', lastname: 'Cartier', email: 'edith.cartier@example.com' },
|
|
5334
|
+
{ firstname: 'Alphonse', lastname: 'Bouvier', email: 'alphonse.bouvier@example.com' },
|
|
5335
|
+
{ firstname: 'Eustache', lastname: 'Dubois', email: 'eustache.dubois@example.com' },
|
|
5336
|
+
{ firstname: 'Rosemarie', lastname: 'Quessy', email: 'rosemarie.quessy@example.com' },
|
|
5337
|
+
{ firstname: 'Serge', lastname: 'Rivard', email: 'serge.rivard@example.com' },
|
|
5338
|
+
{ firstname: 'Jacques', lastname: 'Demers', email: 'jacques.demers@example.com' },
|
|
5339
|
+
{ firstname: 'Aimée', lastname: 'Josseaume', email: 'aimee.josseaume@example.com' },
|
|
5340
|
+
{ firstname: 'Delphine', lastname: 'Robillard', email: 'delphine.robillard@example.com' },
|
|
5341
|
+
{ firstname: 'Alexandre', lastname: 'Lazure', email: 'alexandre.lazure@example.com' },
|
|
5342
|
+
]
|
|
5343
|
+
}
|
|
5344
|
+
|
|
5345
|
+
// Initialize data
|
|
5346
|
+
fetchData()
|
|
5347
|
+
</script>
|
|
5348
|
+
`,
|
|
5349
|
+
},
|
|
5350
|
+
],
|
|
5351
|
+
},
|
|
5352
|
+
args: {
|
|
5353
|
+
'options': {
|
|
5354
|
+
itemsPerPage: 5,
|
|
5355
|
+
sortBy: [{ key: 'lastname', order: 'asc' }],
|
|
5356
|
+
page: 1,
|
|
5357
|
+
},
|
|
5358
|
+
'itemsPerPageOptions': [5, 10, 15],
|
|
5359
|
+
'headers': [
|
|
5360
|
+
{ title: 'Nom', key: 'lastname' },
|
|
5361
|
+
{ title: 'Prénom', key: 'firstname' },
|
|
5362
|
+
{ title: 'Email', key: 'email' },
|
|
5363
|
+
],
|
|
5364
|
+
'caption': '',
|
|
5365
|
+
'serverItemsLength': 15,
|
|
5366
|
+
'suffix': 'server-default',
|
|
5367
|
+
'density': 'default',
|
|
5368
|
+
'striped': false,
|
|
5369
|
+
'onUpdate:options': fn(),
|
|
5370
|
+
},
|
|
5371
|
+
render: (args) => {
|
|
5372
|
+
return {
|
|
5373
|
+
components: { SyServerTable },
|
|
5374
|
+
setup() {
|
|
5375
|
+
const totalUsers = ref(0)
|
|
5376
|
+
const users = ref<User[]>([])
|
|
5377
|
+
const state = ref(StateEnum.IDLE)
|
|
5378
|
+
|
|
5379
|
+
const options = ref({ ...args.options })
|
|
5380
|
+
|
|
5381
|
+
watch(options, (newVal) => {
|
|
5382
|
+
if (args.options) {
|
|
5383
|
+
Object.assign(args.options, JSON.parse(JSON.stringify(newVal)))
|
|
5384
|
+
}
|
|
5385
|
+
}, { deep: true })
|
|
5386
|
+
|
|
5387
|
+
const fetchData = async (): Promise<void> => {
|
|
5388
|
+
const { items, total } = await getDataFromApi(options.value as DataOptions)
|
|
5389
|
+
users.value = items
|
|
5390
|
+
totalUsers.value = total
|
|
5391
|
+
}
|
|
5392
|
+
|
|
5393
|
+
const wait = async (ms: number) => {
|
|
5394
|
+
return new Promise(resolve => setTimeout(resolve, ms))
|
|
5395
|
+
}
|
|
5396
|
+
|
|
5397
|
+
const getDataFromApi = async ({ sortBy, page, itemsPerPage }: DataOptions): Promise<DataObj> => {
|
|
5398
|
+
state.value = StateEnum.PENDING
|
|
5399
|
+
await wait(1000)
|
|
5400
|
+
|
|
5401
|
+
return new Promise((resolve) => {
|
|
5402
|
+
let items: User[] = getUsers()
|
|
5403
|
+
const total = items.length
|
|
5404
|
+
|
|
5405
|
+
if (sortBy && sortBy.length > 0) {
|
|
5406
|
+
items = items.sort((a, b) => {
|
|
5407
|
+
const key = sortBy[0].key
|
|
5408
|
+
const order = sortBy[0].order === 'asc' ? 1 : -1
|
|
5409
|
+
|
|
5410
|
+
return a[key] > b[key] ? order : -order
|
|
5411
|
+
})
|
|
5412
|
+
}
|
|
5413
|
+
|
|
5414
|
+
if (itemsPerPage > 0) {
|
|
5415
|
+
items = items.slice((page - 1) * itemsPerPage, page * itemsPerPage)
|
|
5416
|
+
}
|
|
5417
|
+
|
|
5418
|
+
resolve({ items, total })
|
|
5419
|
+
state.value = StateEnum.RESOLVED
|
|
5420
|
+
})
|
|
5421
|
+
}
|
|
5422
|
+
|
|
5423
|
+
const getUsers = (): User[] => {
|
|
5424
|
+
return [
|
|
5425
|
+
{ firstname: 'Virginie', lastname: 'Beauchesne', email: 'virginie.beauchesne@example.com' },
|
|
5426
|
+
{ firstname: 'Simone', lastname: 'Bellefeuille', email: 'simone.bellefeuille@example.com' },
|
|
5427
|
+
{ firstname: 'Étienne', lastname: 'Salois', email: 'etienne.salois@example.com' },
|
|
5428
|
+
{ firstname: 'Bernadette', lastname: 'Langelier', email: 'bernadette.langelier@example.com' },
|
|
5429
|
+
{ firstname: 'Agate', lastname: 'Roy', email: 'agate.roy@example.com' },
|
|
5430
|
+
{ firstname: 'Louis', lastname: 'Denis', email: 'louis.denis@example.com' },
|
|
5431
|
+
{ firstname: 'Édith', lastname: 'Cartier', email: 'edith.cartier@example.com' },
|
|
5432
|
+
{ firstname: 'Alphonse', lastname: 'Bouvier', email: 'alphonse.bouvier@example.com' },
|
|
5433
|
+
{ firstname: 'Eustache', lastname: 'Dubois', email: 'eustache.dubois@example.com' },
|
|
5434
|
+
{ firstname: 'Rosemarie', lastname: 'Quessy', email: 'rosemarie.quessy@example.com' },
|
|
5435
|
+
{ firstname: 'Serge', lastname: 'Rivard', email: 'serge.rivard@example.com' },
|
|
5436
|
+
{ firstname: 'Jacques', lastname: 'Demers', email: 'jacques.demers@example.com' },
|
|
5437
|
+
{ firstname: 'Aimée', lastname: 'Josseaume', email: 'aimee.josseaume@example.com' },
|
|
5438
|
+
{ firstname: 'Delphine', lastname: 'Robillard', email: 'delphine.robillard@example.com' },
|
|
5439
|
+
{ firstname: 'Alexandre', lastname: 'Lazure', email: 'alexandre.lazure@example.com' },
|
|
5440
|
+
]
|
|
5441
|
+
}
|
|
5442
|
+
|
|
5443
|
+
// Initialize data
|
|
5444
|
+
fetchData()
|
|
5445
|
+
|
|
5446
|
+
return { args, users, state, fetchData, options, totalUsers, StateEnum }
|
|
5447
|
+
},
|
|
5448
|
+
template: `
|
|
5449
|
+
<div>
|
|
5450
|
+
<SyServerTable
|
|
5451
|
+
v-model:options="options"
|
|
5452
|
+
:items="users"
|
|
5453
|
+
:items-per-page-options="args.itemsPerPageOptions"
|
|
5454
|
+
:server-items-length="totalUsers"
|
|
5455
|
+
:loading="state === StateEnum.PENDING"
|
|
5456
|
+
v-bind="args"
|
|
5457
|
+
@update:options="fetchData"
|
|
5458
|
+
/>
|
|
5459
|
+
</div>
|
|
5460
|
+
`,
|
|
5461
|
+
}
|
|
5462
|
+
},
|
|
5463
|
+
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { usePagination } from '../common/usePagination'
|
|
14
14
|
import { useTableOptions } from '../common/useTableOptions'
|
|
15
15
|
import { useTableHeaders } from '../common/useTableHeaders'
|
|
16
|
-
import { useTableItems } from '../common/useTableItems'
|
|
16
|
+
// import { useTableItems } from '../common/useTableItems'
|
|
17
17
|
import OrganizeColumns from '../common/organizeColumns/OrganizeColumns.vue'
|
|
18
18
|
import { useTableCheckbox } from '../common/useTableCheckbox'
|
|
19
19
|
import { useTableAria } from '../common/useTableAria'
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
showSelect: false,
|
|
31
31
|
multiSort: false,
|
|
32
32
|
mustSort: false,
|
|
33
|
+
itemsPerPageOptions: undefined,
|
|
33
34
|
})
|
|
34
35
|
|
|
35
36
|
const emit = defineEmits<{
|
|
@@ -92,13 +93,15 @@
|
|
|
92
93
|
// For server-side tables, we don't use the filteredItems from useTableItems
|
|
93
94
|
// Instead, we use the items directly from props as they are already filtered server-side
|
|
94
95
|
// But we still need the createEmptyItemWithStructure function
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
96
|
+
|
|
97
|
+
// TODO: A voir avec @David
|
|
98
|
+
// const { createEmptyItemWithStructure } = useTableItems({
|
|
99
|
+
// items: itemsRef,
|
|
100
|
+
// headers,
|
|
101
|
+
// filters,
|
|
102
|
+
// options,
|
|
103
|
+
// filterItems,
|
|
104
|
+
// })
|
|
102
105
|
|
|
103
106
|
// Use the pagination composable with serverItemsLength
|
|
104
107
|
const itemsLength = computed(() => props.serverItemsLength)
|
|
@@ -250,7 +253,8 @@
|
|
|
250
253
|
v-model="model"
|
|
251
254
|
:headers="displayHeaders"
|
|
252
255
|
color="primary"
|
|
253
|
-
|
|
256
|
+
hide-no-data
|
|
257
|
+
:items="processItems(props.items)"
|
|
254
258
|
:items-length="props.serverItemsLength || 0"
|
|
255
259
|
:density="props.density"
|
|
256
260
|
:show-select="props.showSelect"
|
|
@@ -354,6 +358,13 @@
|
|
|
354
358
|
</VBtn>
|
|
355
359
|
</td>
|
|
356
360
|
</tr>
|
|
361
|
+
<tr v-if="props.items.length === 0 || props.serverItemsLength === 0">
|
|
362
|
+
<td colspan="100%">
|
|
363
|
+
<div class="text-center text-grey">
|
|
364
|
+
{{ locales.noData }}
|
|
365
|
+
</div>
|
|
366
|
+
</td>
|
|
367
|
+
</tr>
|
|
357
368
|
</template>
|
|
358
369
|
<!-- Repli lorsque les colonnes ne sont pas définies -->
|
|
359
370
|
<template v-else>
|
|
@@ -391,6 +402,13 @@
|
|
|
391
402
|
</SyTableFilter>
|
|
392
403
|
</th>
|
|
393
404
|
</tr>
|
|
405
|
+
<tr v-if="props.items.length === 0 || props.serverItemsLength === 0">
|
|
406
|
+
<td colspan="100%">
|
|
407
|
+
<div class="text-center text-grey">
|
|
408
|
+
{{ locales.noData }}
|
|
409
|
+
</div>
|
|
410
|
+
</td>
|
|
411
|
+
</tr>
|
|
394
412
|
</template>
|
|
395
413
|
</template>
|
|
396
414
|
|
|
@@ -412,11 +430,12 @@
|
|
|
412
430
|
v-model:headers="headers"
|
|
413
431
|
/>
|
|
414
432
|
<SyTablePagination
|
|
415
|
-
v-if="props.
|
|
433
|
+
v-if="props.items.length > 0 ? props.serverItemsLength : 0"
|
|
416
434
|
:page="page"
|
|
417
435
|
:items-per-page="itemsPerPageValue"
|
|
418
436
|
:page-count="pageCount"
|
|
419
437
|
:items-length="props.serverItemsLength"
|
|
438
|
+
:items-per-page-options="props.itemsPerPageOptions"
|
|
420
439
|
@update:page="page = $event"
|
|
421
440
|
@update:items-per-page="updateItemsPerPage"
|
|
422
441
|
/>
|
|
@@ -24,38 +24,33 @@ Pour gérer individuellement le stockage des options pour différents tableaux,
|
|
|
24
24
|
### Tri des colonnes
|
|
25
25
|
|
|
26
26
|
Le composant permet de trier les données par colonne en cliquant sur l'en-tête de la colonne.
|
|
27
|
-
<Canvas story={{height: '550px'}} of={SyTable.SortBy} />
|
|
28
27
|
|
|
29
28
|
Le multi-tri est également supporté. Vous pouvez activer cette fonctionnalité en utilisant la prop `multi-sort`.
|
|
30
|
-
<Canvas story={{height: '550px'}} of={SyTable.MultiSort} />
|
|
31
29
|
|
|
32
30
|
### Filtres des colonnes
|
|
33
31
|
|
|
34
32
|
Le composant permet d'appliquer des filtres sur les colonnes. Vous pouvez définir des filtres personnalisés pour chaque colonne en utilisant la prop `show-filters`. Voir d'autres exemples de filtres dans les stories.
|
|
35
|
-
<Canvas story={{height: '550px'}} of={SyTable.FilterByText} />
|
|
36
33
|
|
|
37
34
|
### Resize des colonnes
|
|
38
35
|
|
|
39
36
|
Le composant peut permettre de redimensionner les colonnes en utilisant la prop `resizable-columns`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
|
|
40
|
-
<Canvas story={{height: '550px'}} of={SyTable.ResizableColumns} />
|
|
41
37
|
|
|
42
38
|
### Réorganisation des colonnes
|
|
43
39
|
|
|
44
40
|
Le composant permet de cacher ou réorganiser l'ordre des colonnes en utilisant la prop `enable-column-controls`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
|
|
45
|
-
<Canvas story={{height: '550px'}} of={SyTable.ColumnControls} />
|
|
46
41
|
|
|
47
42
|
### Selection des lignes
|
|
48
43
|
|
|
49
44
|
Le composant permet de sélectionner des lignes individuellement ou en masse. Vous pouvez activer la sélection en utilisant la prop `show-select`.
|
|
50
|
-
<Canvas story={{height: '550px'}} of={SyTable.RowSelection} />
|
|
51
45
|
|
|
52
46
|
### Slot item
|
|
53
47
|
Le composant permet de personnaliser l'affichage des contenus en utilisant le slot `item`. Vous pouvez définir la structure de chaque contenu en fonction de vos besoins.
|
|
54
|
-
<Canvas story={{height: '550px'}} of={SyTable.SlotItem} />
|
|
55
48
|
|
|
56
49
|
### Slot headers
|
|
57
50
|
Le composant permet de personnaliser l'affichage des en-têtes de colonnes en utilisant le slot `headers`. Vous pouvez définir la structure de chaque en-tête en fonction de vos besoins.
|
|
58
|
-
|
|
51
|
+
|
|
52
|
+
### Items par page options
|
|
53
|
+
Le composant permet de personnaliser le nombre possible d'éléments par page en utilisant la prop `items-per-page-options`. Vous pouvez spécifier un tableau d'options pour permettre de choisir le nombre d'éléments affichés par page.
|
|
59
54
|
|
|
60
55
|
### Accessibilité
|
|
61
56
|
|
|
@@ -139,8 +134,6 @@ Le composant améliore l'accessibilité en ajoutant automatiquement :
|
|
|
139
134
|
|
|
140
135
|
Pour utiliser plusieurs tableaux sur une même page avec des options indépendantes, utilisez la prop `suffix` pour chaque tableau.
|
|
141
136
|
|
|
142
|
-
<Canvas of={SyTable.ManyTables} />
|
|
143
|
-
|
|
144
137
|
## Bonnes pratiques
|
|
145
138
|
|
|
146
139
|
- Utilisez des en-têtes clairs et descriptifs pour chaque colonne
|