mirror of
https://github.com/reduxjs/redux-devtools.git
synced 2025-07-27 00:19:55 +03:00
feat(rtk-query): add counters on tags & subs tab buttons
This commit is contained in:
parent
d574358c5d
commit
e649318adb
|
@ -50,6 +50,36 @@ export class QueryPreview extends React.PureComponent<QueryPreviewProps> {
|
||||||
this.labelRenderer = createTreeItemLabelRenderer(this.props.styling);
|
this.labelRenderer = createTreeItemLabelRenderer(this.props.styling);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renderLabelWithCounter = (label: React.ReactText, counter: number): string => {
|
||||||
|
let counterAsString = counter.toFixed(0);
|
||||||
|
|
||||||
|
if(counterAsString.length > 3) {
|
||||||
|
counterAsString = counterAsString.slice(0, 2) + '...';
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${label} (${counterAsString})`
|
||||||
|
}
|
||||||
|
|
||||||
|
renderTabLabel = (tab: QueryPreviewTabOption): ReactNode => {
|
||||||
|
const { queryInfo, tags, querySubscriptions } = this.props;
|
||||||
|
if(queryInfo) {
|
||||||
|
if(tab.value === QueryPreviewTabs.queryTags && tags.length > 0) {
|
||||||
|
return this.renderLabelWithCounter(tab.label, tags.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(tab.value === QueryPreviewTabs.querySubscriptions && querySubscriptions) {
|
||||||
|
const subsCount = Object.keys(querySubscriptions).length;
|
||||||
|
|
||||||
|
if(subsCount > 0) {
|
||||||
|
return this.renderLabelWithCounter(tab.label, subsCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tab.label;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
render(): ReactNode {
|
render(): ReactNode {
|
||||||
const {
|
const {
|
||||||
queryInfo,
|
queryInfo,
|
||||||
|
@ -73,6 +103,7 @@ export class QueryPreview extends React.PureComponent<QueryPreviewProps> {
|
||||||
selectedTab={selectedTab}
|
selectedTab={selectedTab}
|
||||||
onTabChange={onTabChange}
|
onTabChange={onTabChange}
|
||||||
tabs={tabs}
|
tabs={tabs}
|
||||||
|
renderTabLabel={this.renderTabLabel}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
@ -89,6 +120,7 @@ export class QueryPreview extends React.PureComponent<QueryPreviewProps> {
|
||||||
selectedTab={selectedTab}
|
selectedTab={selectedTab}
|
||||||
onTabChange={onTabChange}
|
onTabChange={onTabChange}
|
||||||
tabs={tabs}
|
tabs={tabs}
|
||||||
|
renderTabLabel={this.renderTabLabel}
|
||||||
/>
|
/>
|
||||||
<TabComponent
|
<TabComponent
|
||||||
styling={styling}
|
styling={styling}
|
||||||
|
|
|
@ -7,6 +7,7 @@ export interface QueryPreviewHeaderProps {
|
||||||
tabs: ReadonlyArray<QueryPreviewTabOption>;
|
tabs: ReadonlyArray<QueryPreviewTabOption>;
|
||||||
onTabChange: (tab: QueryPreviewTabs) => void;
|
onTabChange: (tab: QueryPreviewTabs) => void;
|
||||||
selectedTab: QueryPreviewTabs;
|
selectedTab: QueryPreviewTabs;
|
||||||
|
renderTabLabel?: (tab: QueryPreviewTabOption) => ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class QueryPreviewHeader extends React.Component<QueryPreviewHeaderProps> {
|
export class QueryPreviewHeader extends React.Component<QueryPreviewHeaderProps> {
|
||||||
|
@ -17,7 +18,7 @@ export class QueryPreviewHeader extends React.Component<QueryPreviewHeaderProps>
|
||||||
};
|
};
|
||||||
|
|
||||||
render(): ReactNode {
|
render(): ReactNode {
|
||||||
const { tabs, selectedTab } = this.props;
|
const { tabs, selectedTab, renderTabLabel } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<StyleUtilsContext.Consumer>
|
<StyleUtilsContext.Consumer>
|
||||||
|
@ -36,7 +37,7 @@ export class QueryPreviewHeader extends React.Component<QueryPreviewHeaderProps>
|
||||||
tab.value === selectedTab
|
tab.value === selectedTab
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{tab.label}
|
{renderTabLabel ? renderTabLabel(tab) : tab.label}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
export default function isIterable(obj: any) {
|
export default function isIterable(obj: unknown): boolean {
|
||||||
return (
|
return (
|
||||||
obj !== null &&
|
obj !== null &&
|
||||||
typeof obj === 'object' &&
|
typeof obj === 'object' &&
|
||||||
!Array.isArray(obj) &&
|
!Array.isArray(obj) &&
|
||||||
typeof obj[window.Symbol.iterator] === 'function'
|
typeof (obj as any)[window.Symbol.iterator] === 'function'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user