132132</template >
133133
134134<script setup lang="ts">
135- import { aggregators , PivotData , sortAs , locales } from ' @/helper'
135+ import { PivotData , sortAs , locales , AggregatorTemplate , Locale } from ' @/helper'
136136import VRendererCell from ' ./VRendererCell.vue'
137137import VAggregatorCell from ' ./VAggregatorCell.vue'
138138import VDragAndDropCell from ' ./VDragAndDropCell.vue'
@@ -144,22 +144,43 @@ import {
144144 usePivotUiState ,
145145 provideFilterBox
146146} from ' @/composables'
147- import { DefaultPropsType , PivotModelInterface } from ' @/types'
147+ import { DefaultPropsType , PivotModelInterface , RendererDefinition } from ' @/types'
148148
149149const props = withDefaults (
150150 defineProps <
151- DefaultPropsType & {
151+ Partial < DefaultPropsType > & {
152+ data: any
153+ renderers : Record < string , RendererDefinition>
152154 hiddenAttributes?: string []
153155 hiddenFromAggregators ?: string []
154156 hiddenFromDragDrop ?: string []
155157 restrictedFromDragDrop ?: string []
156158 menuLimit ?: number
157159 pivotModel ?: PivotModelInterface
158160 hideFilterBoxOfUnusedAttributes ?: boolean
161+ aggregators ?: Record < string , AggregatorTemplate>
162+ aggregatorName?: string
163+ heatmapMode ?: ' full' | ' col' | ' row' | ' '
164+ tableColorScaleGenerator ?: (... args : any []) => any
165+ tableOptions ?: Record < string , any>
166+ rendererName?: string
167+ locale ?: string
168+ languagePack ?: Record < string , Locale>
169+ showRowTotal?: boolean
170+ showColTotal ?: boolean
171+ cols ?: string []
172+ rows ?: string []
173+ vals ?: string []
174+ attributes ?: string []
175+ valueFilter ?: Record < string , any>
176+ sorters?: any
177+ derivedAttributes ?: any
178+ rowOrder ?: ' key_a_to_z' | ' value_a_to_z' | ' value_z_to_a'
179+ colOrder ?: ' key_a_to_z' | ' value_a_to_z' | ' value_z_to_a'
180+ tableMaxWidth ?: number
159181 }
160182 > (),
161183 {
162- aggregators : () => aggregators ,
163184 hiddenAttributes : () => [],
164185 hiddenFromAggregators : () => [],
165186 pivotModel: undefined ,
@@ -170,7 +191,20 @@ const props = withDefaults(
170191 rowOrder: ' key_a_to_z' ,
171192 colOrder: ' key_a_to_z' ,
172193 languagePack : () => locales ,
173- locale: ' en'
194+ locale: ' en' ,
195+ rows : () => [],
196+ cols : () => [],
197+ vals : () => [],
198+ aggregatorName: ' Count' ,
199+ rendererName: ' Table' ,
200+ valueFilter : () => ({}),
201+ heatmapMode: ' ' ,
202+ tableColorScaleGenerator: undefined ,
203+ tableOptions : () => ({}),
204+ attributes : () => [],
205+ sorters : () => ({}),
206+ derivedAttributes : () => ({}),
207+ tableMaxWidth: 0
174208 }
175209)
176210
@@ -179,6 +213,55 @@ const emit = defineEmits<{
179213 ' change' : [model : PivotModelInterface ]
180214}>()
181215
216+ // pivotModel이 제공되면 해당 값으로 props 오버라이드
217+ const propsWithModel = computed (() => {
218+ const base = {
219+ data: props .data ,
220+ renderers: props .renderers ,
221+ aggregators: props .aggregators ,
222+ aggregatorName: props .aggregatorName || ' Count' ,
223+ heatmapMode: (props .heatmapMode || ' ' ) as ' full' | ' col' | ' row' | ' ' ,
224+ tableColorScaleGenerator: props .tableColorScaleGenerator ,
225+ tableOptions: props .tableOptions ,
226+ rendererName: props .rendererName || ' Table' ,
227+ locale: props .locale || ' en' ,
228+ languagePack: props .languagePack || locales ,
229+ showRowTotal: props .showRowTotal ,
230+ showColTotal: props .showColTotal ,
231+ cols: props .cols || [],
232+ rows: props .rows || [],
233+ vals: props .vals || [],
234+ attributes: props .attributes ,
235+ valueFilter: props .valueFilter || {},
236+ sorters: props .sorters ,
237+ derivedAttributes: props .derivedAttributes ,
238+ rowOrder: (props .rowOrder || ' key_a_to_z' ) as ' key_a_to_z' | ' value_a_to_z' | ' value_z_to_a' ,
239+ colOrder: (props .colOrder || ' key_a_to_z' ) as ' key_a_to_z' | ' value_a_to_z' | ' value_z_to_a' ,
240+ tableMaxWidth: props .tableMaxWidth ,
241+ hiddenAttributes: props .hiddenAttributes || [],
242+ hiddenFromAggregators: props .hiddenFromAggregators || [],
243+ hiddenFromDragDrop: props .hiddenFromDragDrop || [],
244+ restrictedFromDragDrop: props .restrictedFromDragDrop || [],
245+ hideFilterBoxOfUnusedAttributes: props .hideFilterBoxOfUnusedAttributes || false
246+ }
247+
248+ if (props .pivotModel && Object .keys (props .pivotModel ).length > 0 ) {
249+ return {
250+ ... base ,
251+ rows: props .pivotModel .rows || base .rows ,
252+ cols: props .pivotModel .cols || base .cols ,
253+ vals: props .pivotModel .vals || base .vals ,
254+ aggregatorName: props .pivotModel .aggregatorName || base .aggregatorName ,
255+ rendererName: props .pivotModel .rendererName || base .rendererName ,
256+ valueFilter: props .pivotModel .valueFilter || base .valueFilter ,
257+ rowOrder: (props .pivotModel .rowOrder || base .rowOrder ) as ' key_a_to_z' | ' value_a_to_z' | ' value_z_to_a' ,
258+ colOrder: (props .pivotModel .colOrder || base .colOrder ) as ' key_a_to_z' | ' value_a_to_z' | ' value_z_to_a' ,
259+ heatmapMode: (props .pivotModel .heatmapMode || base .heatmapMode ) as ' full' | ' col' | ' row' | ' '
260+ }
261+ }
262+ return base
263+ })
264+
182265const {
183266 state,
184267 localeStrings,
@@ -190,7 +273,7 @@ const {
190273 onUpdateRowOrder,
191274 onUpdateColOrder,
192275 onUpdateVals
193- } = usePropsState (props , emit )
276+ } = usePropsState (propsWithModel . value , emit )
194277
195278const {
196279 state : pivotUiState,
@@ -283,8 +366,8 @@ const pivotProps = computed(() => ({
283366 tableOptions: state .tableOptions ,
284367 renderers: rendererItems .value ,
285368 rendererName: state .rendererName ,
286- locale: state .locale ,
287- languagePack: state .languagePack ,
369+ locale: state .locale || ' en ' ,
370+ languagePack: state .languagePack || locales ,
288371 showRowTotal: state .showRowTotal ,
289372 showColTotal: state .showColTotal ,
290373 cols: state .cols ,
0 commit comments