Skip to content

Commit 8782597

Browse files
authored
Add widgetId argument in dataProviderContextGetter (#1888)
1 parent 81886cf commit 8782597

File tree

8 files changed

+50
-21
lines changed

8 files changed

+50
-21
lines changed

src/ui/components/DashKit/helpers.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ interface DashkitWrapperProps extends DashKitProps {
113113
isNewRelations?: boolean;
114114
hideErrorDetails?: boolean;
115115
// Extended headers context for widgets
116-
dataProviderContextGetter?: () => DashChartRequestContext;
116+
dataProviderContextGetter?: (widgetId: string) => DashChartRequestContext;
117117
setWidgetCurrentTab?: (payload: {widgetId: string; tabId: string}) => void;
118118
}
119119

src/ui/components/DashKit/plugins/Control/Control.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,9 @@ class Control extends React.PureComponent<PluginControlProps, PluginControlState
427427
const {workbookId} = this.props;
428428

429429
const payloadCancellation = chartsDataProvider.getRequestCancellation();
430-
const dataProviderContextGetter = this.context?.dataProviderContextGetter?.();
430+
const dataProviderContextGetter = this.context?.dataProviderContextGetter?.(
431+
this.props.id,
432+
);
431433

432434
const payload = {
433435
data: {
@@ -561,7 +563,7 @@ class Control extends React.PureComponent<PluginControlProps, PluginControlState
561563
this._getDistinctsMemo ||
562564
((params) => {
563565
const {getDistincts} = this.props;
564-
const headers = this?.context?.dataProviderContextGetter?.();
566+
const headers = this?.context?.dataProviderContextGetter?.(this.props.id);
565567

566568
return (getDistincts as Exclude<ControlSettings['getDistincts'], void>)?.(
567569
params,

src/ui/components/DashKit/plugins/GroupControl/Control/Control.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ type ControlProps = {
9999
}) => void;
100100
silentLoading: boolean;
101101
getDistincts?: ControlSettings['getDistincts'];
102-
requestHeaders?: Record<string, string>;
102+
requestHeaders?: () => Record<string, string>;
103103
onChange: ({
104104
params,
105105
callChangeByClick,
@@ -226,7 +226,7 @@ export const Control = ({
226226
...(workbookId ? {workbookId} : {}),
227227
},
228228
cancelToken: payloadCancellation.token,
229-
headers: requestHeaders,
229+
headers: requestHeaders?.(),
230230
};
231231

232232
cancelCurrentRunRequest();

src/ui/components/DashKit/plugins/GroupControl/GroupControl.tsx

+10-3
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,7 @@ class GroupControl extends React.PureComponent<PluginGroupControlProps, PluginGr
686686
this._getDistinctsMemo ||
687687
((params) => {
688688
const {getDistincts} = this.props;
689-
const headers = this?.context?.dataProviderContextGetter?.();
689+
const headers = this?.context?.dataProviderContextGetter?.(this.props.id);
690690

691691
return (getDistincts as Exclude<ControlSettings['getDistincts'], void>)?.(
692692
params,
@@ -700,10 +700,17 @@ class GroupControl extends React.PureComponent<PluginGroupControlProps, PluginGr
700700
return this._getDistinctsMemo;
701701
}
702702

703+
private requestHeadersGetter() {
704+
if (this?.context?.dataProviderContextGetter) {
705+
return this.context.dataProviderContextGetter(this.props.id);
706+
}
707+
708+
return {};
709+
}
710+
703711
private renderControl(item: DashTabItemControlSingle) {
704712
const {workbookId} = this.props;
705713
const {silentLoading} = this.state;
706-
const dataProviderContextGetter = this?.context?.dataProviderContextGetter?.();
707714

708715
return (
709716
<Control
@@ -719,7 +726,7 @@ class GroupControl extends React.PureComponent<PluginGroupControlProps, PluginGr
719726
workbookId={workbookId}
720727
dependentSelectors={this.dependentSelectors}
721728
groupId={this.props.id}
722-
requestHeaders={dataProviderContextGetter}
729+
requestHeaders={this.requestHeadersGetter}
723730
/>
724731
);
725732
}

src/ui/components/Widgets/Chart/hooks/useLoadingChart.ts

+16-10
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ import {useMemoCallback} from './useMemoCallback';
6262

6363
export type LoadingChartHookProps = {
6464
dataProvider: ChartWithProviderProps['dataProvider'];
65-
dataProviderContextGetter?: () => DashChartRequestContext;
65+
requestHeadersGetter?: () => DashChartRequestContext;
6666
initialData: DataProps;
6767
requestId: string;
6868
requestCancellationRef: React.MutableRefObject<CurrentRequestState>;
@@ -123,7 +123,7 @@ const loadingStateReducer = (state: LoadingStateType, newState: Partial<LoadingS
123123
export const useLoadingChart = (props: LoadingChartHookProps) => {
124124
const {
125125
dataProvider,
126-
dataProviderContextGetter,
126+
requestHeadersGetter,
127127
initialData,
128128
requestId,
129129
requestCancellationRef,
@@ -425,7 +425,7 @@ export const useLoadingChart = (props: LoadingChartHookProps) => {
425425
requestCancellation:
426426
requestCancellationRef.current[requestId]?.requestCancellation ||
427427
dataProvider.getRequestCancellation(),
428-
...(dataProviderContextGetter ? {contextHeaders: dataProviderContextGetter()} : {}),
428+
...(requestHeadersGetter ? {contextHeaders: requestHeadersGetter()} : {}),
429429
});
430430

431431
const isCanceled = requestCancellationRef.current?.[requestId]?.status === 'canceled';
@@ -490,7 +490,7 @@ export const useLoadingChart = (props: LoadingChartHookProps) => {
490490
resolveMetaDataRef?.current?.(resolveWidgetDataRef?.current?.(null));
491491
}
492492
}, [
493-
dataProviderContextGetter,
493+
requestHeadersGetter,
494494
dispatch,
495495
changedInnerFlag,
496496
usedParamsRef,
@@ -769,9 +769,7 @@ export const useLoadingChart = (props: LoadingChartHookProps) => {
769769
requestCancellation:
770770
requestCancellationRef.current[requestId]?.requestCancellation ||
771771
dataProvider.getRequestCancellation(),
772-
...(dataProviderContextGetter
773-
? {contextHeaders: dataProviderContextGetter()}
774-
: {}),
772+
...(requestHeadersGetter ? {contextHeaders: requestHeadersGetter()} : {}),
775773
});
776774
if (!rootNodeRef.current) {
777775
return null;
@@ -786,7 +784,15 @@ export const useLoadingChart = (props: LoadingChartHookProps) => {
786784
}
787785
return null;
788786
},
789-
[dataProvider, initialData, requestId, requestCancellationRef, rootNodeRef, handleError],
787+
[
788+
dataProvider,
789+
initialData,
790+
requestId,
791+
requestCancellationRef,
792+
rootNodeRef,
793+
handleError,
794+
requestHeadersGetter,
795+
],
790796
);
791797

792798
const handleChange = useMemoCallback(
@@ -911,10 +917,10 @@ export const useLoadingChart = (props: LoadingChartHookProps) => {
911917
return dataProvider.runAction({
912918
props: {...initialData, params},
913919
requestId,
914-
...(dataProviderContextGetter ? {contextHeaders: dataProviderContextGetter()} : {}),
920+
...(requestHeadersGetter ? {contextHeaders: requestHeadersGetter()} : {}),
915921
});
916922
},
917-
[dataProvider, initialData, requestId, dataProviderContextGetter],
923+
[dataProvider, initialData, requestId, requestHeadersGetter],
918924
);
919925

920926
return {

src/ui/components/Widgets/Chart/hooks/useLoadingChartSelector.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,13 @@ export const useLoadingChartSelector = (props: LoadingChartSelectorHookProps) =>
172172
[adjustLayout, props.data.autoHeight],
173173
);
174174

175+
/**
176+
* Memoised dataProviderContextGetter with widget id
177+
*/
178+
const requestHeadersGetter = React.useMemo(() => {
179+
return dataProviderContextGetter?.bind(this, widgetId);
180+
}, [widgetId, dataProviderContextGetter]);
181+
175182
const {
176183
loadedData,
177184
isLoading,
@@ -191,7 +198,7 @@ export const useLoadingChartSelector = (props: LoadingChartSelectorHookProps) =>
191198
loadControls,
192199
} = useLoadingChart({
193200
dataProvider,
194-
dataProviderContextGetter,
201+
requestHeadersGetter,
195202
initialData,
196203
requestId,
197204
requestCancellationRef,

src/ui/components/Widgets/Chart/hooks/useLoadingChartWidget.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,13 @@ export const useLoadingChartWidget = (props: LoadingChartWidgetHookProps) => {
211211
setLoadedWidgetType(data?.loadedData?.type as string);
212212
}, []);
213213

214+
/**
215+
* Memoised dataProviderContextGetter with widget id
216+
*/
217+
const requestHeadersGetter = React.useMemo(() => {
218+
return dataProviderContextGetter?.bind(this, widgetId);
219+
}, [widgetId, dataProviderContextGetter]);
220+
214221
const {
215222
loadedData,
216223
isLoading,
@@ -235,7 +242,7 @@ export const useLoadingChartWidget = (props: LoadingChartWidgetHookProps) => {
235242
dataProps,
236243
} = useLoadingChart({
237244
dataProvider,
238-
dataProviderContextGetter,
245+
requestHeadersGetter,
239246
initialData,
240247
requestId,
241248
requestCancellationRef,

src/ui/units/dash/utils/context.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ export const ExtendedDashKitContext = createContext<{
99
isNewRelations: boolean;
1010
defaultGlobalParams?: DashSettingsGlobalParams;
1111
hideErrorDetails?: boolean;
12-
dataProviderContextGetter?: () => DashChartRequestContext;
12+
dataProviderContextGetter?: (widgetId: string) => DashChartRequestContext;
1313
setWidgetCurrentTab?: (payload: {widgetId: string; tabId: string}) => void;
1414
} | null>(null);

0 commit comments

Comments
 (0)