@adaptabletools/adaptable 20.1.8 → 20.2.0-canary.0
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/base.css +27 -0
- package/base.css.map +1 -1
- package/index.css +22 -0
- package/index.css.map +1 -1
- package/package.json +2 -2
- package/src/AdaptableInterfaces/IAdaptable.d.ts +1 -0
- package/src/AdaptableOptions/DefaultAdaptableOptions.js +2 -1
- package/src/AdaptableOptions/ExportOptions.d.ts +91 -8
- package/src/AdaptableOptions/QuickSearchOptions.d.ts +1 -6
- package/src/AdaptableState/FormatColumnState.d.ts +8 -0
- package/src/AdaptableState/LayoutState.d.ts +15 -2
- package/src/AdaptableState/QuickSearchState.d.ts +8 -0
- package/src/Api/ColumnApi.d.ts +5 -0
- package/src/Api/ExportApi.d.ts +23 -7
- package/src/Api/Implementation/ColumnApiImpl.d.ts +2 -2
- package/src/Api/Implementation/ColumnApiImpl.js +15 -30
- package/src/Api/Implementation/ExportApiImpl.d.ts +11 -4
- package/src/Api/Implementation/ExportApiImpl.js +51 -9
- package/src/Api/Implementation/LayoutHelpers.js +44 -0
- package/src/Api/Implementation/QuickSearchApiImpl.d.ts +4 -0
- package/src/Api/Implementation/QuickSearchApiImpl.js +12 -0
- package/src/Api/Internal/AlertInternalApi.js +1 -1
- package/src/Api/Internal/ExportInternalApi.d.ts +3 -8
- package/src/Api/Internal/ExportInternalApi.js +1 -74
- package/src/Api/Internal/ExpressionInternalApi.d.ts +1 -1
- package/src/Api/Internal/ExpressionInternalApi.js +1 -32
- package/src/Api/Internal/FormatColumnInternalApi.d.ts +2 -1
- package/src/Api/Internal/FormatColumnInternalApi.js +62 -0
- package/src/Api/QuickSearchApi.d.ts +16 -0
- package/src/Redux/Store/AdaptableStore.js +3 -2
- package/src/Utilities/Constants/GeneralConstants.js +2 -1
- package/src/View/Components/Forms/AdaptableFormControlTextClear.d.ts +1 -0
- package/src/View/Components/Forms/AdaptableFormControlTextClear.js +1 -0
- package/src/View/Dashboard/Dashboard.js +2 -4
- package/src/View/Layout/Wizard/sections/AggregationsSection.js +2 -2
- package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +2 -2
- package/src/View/Layout/Wizard/sections/PivotRowGroupingSection.js +6 -1
- package/src/View/Layout/Wizard/sections/RowGroupingSection.d.ts +4 -0
- package/src/View/Layout/Wizard/sections/RowGroupingSection.js +22 -19
- package/src/View/QuickSearch/QuickSearchInput.js +6 -1
- package/src/View/QuickSearch/QuickSearchPopup.js +2 -3
- package/src/agGrid/AdaptableAgGrid.d.ts +2 -0
- package/src/agGrid/AdaptableAgGrid.js +121 -38
- package/src/agGrid/AgGridAdapter.d.ts +4 -1
- package/src/agGrid/AgGridAdapter.js +90 -13
- package/src/agGrid/AgGridColumnAdapter.d.ts +4 -0
- package/src/agGrid/AgGridColumnAdapter.js +142 -35
- package/src/agGrid/AgGridExportAdapter.d.ts +6 -1
- package/src/agGrid/AgGridExportAdapter.js +103 -14
- package/src/agGrid/FloatingFilterWrapper.js +30 -4
- package/src/env.js +2 -2
- package/src/layout-manager/src/LayoutManagerModel.d.ts +16 -2
- package/src/layout-manager/src/index.d.ts +1 -1
- package/src/layout-manager/src/index.js +135 -20
- package/src/layout-manager/src/normalizeLayoutModel.d.ts +2 -4
- package/src/layout-manager/src/normalizeLayoutModel.js +12 -16
- package/src/layout-manager/src/simplifyLayoutModel.js +15 -3
- package/src/metamodel/adaptable.metamodel.d.ts +71 -0
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/types.d.ts +1 -1
- package/tsconfig.esm.tsbuildinfo +1 -1
- package/src/Utilities/buildSortedColumnStateForLayout.d.ts +0 -7
- package/src/Utilities/buildSortedColumnStateForLayout.js +0 -131
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { IRowNode } from 'ag-grid-enterprise';
|
|
1
2
|
import { AdaptableColumn, AdaptableFormat, AdaptablePredicateDef, ColumnScope, FormatColumn, StringFormatterOptions } from '../../types';
|
|
2
3
|
import { ApiBase } from '../Implementation/ApiBase';
|
|
3
|
-
import { IRowNode } from 'ag-grid-enterprise';
|
|
4
4
|
export declare class FormatColumnInternalApi extends ApiBase {
|
|
5
5
|
/**
|
|
6
6
|
* Retrieves all Format Columns in Adaptable State with the `Style` property set
|
|
@@ -77,6 +77,7 @@ export declare class FormatColumnInternalApi extends ApiBase {
|
|
|
77
77
|
* @param scope Scope to check
|
|
78
78
|
*/
|
|
79
79
|
getFormatColumnDefsForScope(scope: ColumnScope): AdaptablePredicateDef[];
|
|
80
|
+
formatColumnWithColumnGroupStateShouldRender(formatColumn: FormatColumn, column: AdaptableColumn): boolean;
|
|
80
81
|
/**
|
|
81
82
|
* Checks if format column is relevant for a given cell (intersection of given AdaptableColumn and RowNode)
|
|
82
83
|
*
|
|
@@ -4,6 +4,33 @@ import FormatHelper from '../../Utilities/Helpers/FormatHelper';
|
|
|
4
4
|
import ObjectFactory from '../../Utilities/ObjectFactory';
|
|
5
5
|
import * as ModuleConstants from '../../Utilities/Constants/ModuleConstants';
|
|
6
6
|
import { errorOnce } from '../../agGrid/AdaptableLogger';
|
|
7
|
+
function getParentGroup(source) {
|
|
8
|
+
if (!source) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
let current = source;
|
|
12
|
+
while (current.getParent()) {
|
|
13
|
+
current = current.getParent();
|
|
14
|
+
if (!current) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
const currentProvidedColumnGroup = current.getProvidedColumnGroup();
|
|
18
|
+
// for columns that don't belong to groups or belong to a group that doesn't have full depth
|
|
19
|
+
// there are artificial parent groups created by ag-grid
|
|
20
|
+
// so for the current column group, lets grab the leaf columns
|
|
21
|
+
// and if the only leaf column is the source column, then we can continue
|
|
22
|
+
// and do another iteration where we go up one level
|
|
23
|
+
if (currentProvidedColumnGroup) {
|
|
24
|
+
const leafColumns = current.getLeafColumns();
|
|
25
|
+
if (leafColumns.length === 1 && leafColumns[0] === source) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
// otherwise, we have found the parent group corresponding to the source column
|
|
29
|
+
return currentProvidedColumnGroup;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
7
34
|
export class FormatColumnInternalApi extends ApiBase {
|
|
8
35
|
/**
|
|
9
36
|
* Retrieves all Format Columns in Adaptable State with the `Style` property set
|
|
@@ -145,6 +172,37 @@ export class FormatColumnInternalApi extends ApiBase {
|
|
|
145
172
|
.predicateApi.internalApi.getFormatColumnPredicateDefs(scope)
|
|
146
173
|
.filter((predicateDef) => this.getColumnScopeApi().isScopeInScope(scope, predicateDef.columnScope));
|
|
147
174
|
}
|
|
175
|
+
formatColumnWithColumnGroupStateShouldRender(formatColumn, column) {
|
|
176
|
+
if (!formatColumn.ColumnGroupState) {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
const agGridApi = this.getAdaptableApi().agGridApi;
|
|
180
|
+
const agGridColumn = agGridApi.isPivotMode()
|
|
181
|
+
? agGridApi.getPivotResultColumns().find((col) => col.getColId() === column.columnId)
|
|
182
|
+
: agGridApi.getColumn(column.columnId);
|
|
183
|
+
if (!agGridColumn) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
const columnGroupParentForCurrentColumn = getParentGroup(agGridColumn);
|
|
187
|
+
if (!columnGroupParentForCurrentColumn) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
const columnGroupState = columnGroupParentForCurrentColumn.isExpanded()
|
|
191
|
+
? 'Expanded'
|
|
192
|
+
: 'Collapsed';
|
|
193
|
+
const columnGroupLeafColumns = columnGroupParentForCurrentColumn.getLeafColumns();
|
|
194
|
+
const columnIsTopLevel = columnGroupParentForCurrentColumn.getLevel() === 0 &&
|
|
195
|
+
columnGroupLeafColumns.length === 1 &&
|
|
196
|
+
columnGroupLeafColumns[0] === agGridColumn;
|
|
197
|
+
if (columnIsTopLevel) {
|
|
198
|
+
// for top-level columns don't apply formatColumns that have an explicit ColumnGroupState defined
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
if (formatColumn.ColumnGroupState === 'Both') {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
return formatColumn.ColumnGroupState === columnGroupState;
|
|
205
|
+
}
|
|
148
206
|
/**
|
|
149
207
|
* Checks if format column is relevant for a given cell (intersection of given AdaptableColumn and RowNode)
|
|
150
208
|
*
|
|
@@ -175,6 +233,10 @@ export class FormatColumnInternalApi extends ApiBase {
|
|
|
175
233
|
return false;
|
|
176
234
|
}
|
|
177
235
|
}
|
|
236
|
+
if (formatColumn.ColumnGroupState &&
|
|
237
|
+
!this.formatColumnWithColumnGroupStateShouldRender(formatColumn, column)) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
178
240
|
if (!formatColumn.Rule) {
|
|
179
241
|
return true;
|
|
180
242
|
}
|
|
@@ -17,6 +17,14 @@ export interface QuickSearchApi {
|
|
|
17
17
|
* Clears Quick Search
|
|
18
18
|
*/
|
|
19
19
|
clearQuickSearch(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Goes to the next match for the current Quick Search text
|
|
22
|
+
*/
|
|
23
|
+
gotoNextMatch(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Goes to the previous match for the current Quick Search text
|
|
26
|
+
*/
|
|
27
|
+
gotoPreviousMatch(): void;
|
|
20
28
|
/**
|
|
21
29
|
* Retrieves current Quick Search text
|
|
22
30
|
*/
|
|
@@ -25,6 +33,14 @@ export interface QuickSearchApi {
|
|
|
25
33
|
* Retrieves current Quick Search style
|
|
26
34
|
*/
|
|
27
35
|
getQuickSearchStyle(): AdaptableStyle;
|
|
36
|
+
/**
|
|
37
|
+
* Retrieves the style for the text match in the Quick Search
|
|
38
|
+
*/
|
|
39
|
+
getQuickSearchTextMatchStyle(): Omit<AdaptableStyle, 'ClassName'> | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Retrieves the style for the current text match in the Quick Search
|
|
42
|
+
*/
|
|
43
|
+
getQuickSearchCurrentTextMatchStyle(): Omit<AdaptableStyle, 'ClassName'> | undefined;
|
|
28
44
|
/**
|
|
29
45
|
* Sets style for Quick Search; can be name of (a provided) css style
|
|
30
46
|
* @param style the style to use
|
|
@@ -499,10 +499,11 @@ const adaptableMiddleware = (adaptable) => (function(middlewareAPI) {
|
|
|
499
499
|
case QuickSearchRedux.QUICK_SEARCH_RUN: {
|
|
500
500
|
let returnAction = next(action);
|
|
501
501
|
adaptable.api.gridApi.refreshAllCells(true);
|
|
502
|
+
const actionTyped = action;
|
|
503
|
+
const searchText = actionTyped.quickSearchText;
|
|
504
|
+
adaptable.setAgGridFindSearchValue(searchText);
|
|
502
505
|
// if set then return a query on the text
|
|
503
506
|
if (adaptable.adaptableOptions.quickSearchOptions.filterGridAfterQuickSearch) {
|
|
504
|
-
const actionTyped = action;
|
|
505
|
-
const searchText = actionTyped.quickSearchText;
|
|
506
507
|
if (StringExtensions.IsNotNullOrEmpty(searchText)) {
|
|
507
508
|
adaptable.setAgGridQuickSearch(searchText);
|
|
508
509
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AUTO_GROUP_COLUMN_ID__SINGLE } from '../../layout-manager/src/normalizeLayoutModel';
|
|
1
2
|
export const AUTOGENERATED_PK_COLUMN = '__ADAPTABLE_PK__';
|
|
2
3
|
export const MISSING_COLUMN = ' [MISSING]';
|
|
3
4
|
export const LIGHT_THEME = 'light';
|
|
@@ -20,7 +21,7 @@ export const EMPTY_ARRAY = [];
|
|
|
20
21
|
export const HALF_SECOND = 500;
|
|
21
22
|
export const QUARTER_SECOND = 250;
|
|
22
23
|
export const GROUP_PATH_SEPARATOR = '/';
|
|
23
|
-
export const AG_GRID_GROUPED_COLUMN =
|
|
24
|
+
export const AG_GRID_GROUPED_COLUMN = AUTO_GROUP_COLUMN_ID__SINGLE;
|
|
24
25
|
export const AG_GRID_SELECTION_COLUMN = 'ag-Grid-SelectionColumn';
|
|
25
26
|
export const AG_GRID_PIVOT_COLUMN = 'pivot_';
|
|
26
27
|
export const AG_GRID_PIVOT_GRAND_TOTAL_COLUMN = 'PivotRowTotal_pivot_';
|
|
@@ -6,5 +6,6 @@ export type AdaptableFormControlTextClearProps = {
|
|
|
6
6
|
focusOnClear?: boolean;
|
|
7
7
|
autoFocus?: boolean;
|
|
8
8
|
inputStyle?: CSSProperties;
|
|
9
|
+
actionTools?: React.ReactNode;
|
|
9
10
|
} & InputProps;
|
|
10
11
|
export declare const AdaptableFormControlTextClear: React.ForwardRefExoticComponent<Omit<AdaptableFormControlTextClearProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -25,6 +25,7 @@ export const AdaptableFormControlTextClear = React.forwardRef((props, ref) => {
|
|
|
25
25
|
ref.current = r;
|
|
26
26
|
}
|
|
27
27
|
}, type: "text", placeholder: props.placeholder, value: props.value, onChange: (x) => props.OnTextChange(x.target.value) }),
|
|
28
|
+
props.actionTools,
|
|
28
29
|
React.createElement(SimpleButton, { variant: "text", icon: "close", tooltip: closeButtonTooltip, px: 0, py: 0, marginRight: 1, onClick: () => {
|
|
29
30
|
props.OnTextChange('');
|
|
30
31
|
const input = inputRef.current;
|
|
@@ -11,16 +11,14 @@ import { QuickSearchModuleId } from '../../Utilities/Constants/ModuleConstants';
|
|
|
11
11
|
import { AdaptableViewPanelFactory } from '../AdaptableViewFactory';
|
|
12
12
|
import { AdaptableButtonComponent } from '../Components/AdaptableButton';
|
|
13
13
|
import { AdaptableIconComponent } from '../Components/AdaptableIconComponent';
|
|
14
|
-
import { AdaptableFormControlTextClear } from '../Components/Forms/AdaptableFormControlTextClear';
|
|
15
|
-
import { useQuickSearchDebounced } from '../QuickSearch/useQuickSearchDebounced';
|
|
16
14
|
import UIHelper from '../UIHelper';
|
|
17
15
|
import { CustomDashboardButton } from './CustomDashboardButton';
|
|
18
16
|
import { CustomToolbarWrapper } from './CustomToolbar';
|
|
19
17
|
import { DashboardToolbarFactory } from './DashboardToolbarFactory';
|
|
20
18
|
import { PinnedDashboard } from './PinnedDashboard';
|
|
21
19
|
import { ModuleToolbarWrapper } from './ModuleToolbarWrapper';
|
|
20
|
+
import { QuickSearchInput } from '../QuickSearch/QuickSearchInput';
|
|
22
21
|
const DashboardComponent = (props) => {
|
|
23
|
-
const [searchText, search] = useQuickSearchDebounced(props);
|
|
24
22
|
const dashboardAccessLevel = props.api.entitlementApi.getEntitlementAccessLevelForModule('Dashboard');
|
|
25
23
|
const renderTab = (tab) => {
|
|
26
24
|
const visibleToolbarNames = tab.Toolbars.filter((vt) => vt);
|
|
@@ -89,7 +87,7 @@ const DashboardComponent = (props) => {
|
|
|
89
87
|
};
|
|
90
88
|
const renderQuickSearch = () => {
|
|
91
89
|
return (React.createElement(Box, { ml: 2 },
|
|
92
|
-
React.createElement(
|
|
90
|
+
React.createElement(QuickSearchInput, { width: '7rem' })));
|
|
93
91
|
};
|
|
94
92
|
let instanceName = props.api.internalApi.getToolbarTitle();
|
|
95
93
|
let dashboardOptions = props.api.optionsApi.getDashboardOptions();
|
|
@@ -195,9 +195,9 @@ export const AggregationsSection = (props) => {
|
|
|
195
195
|
React.createElement(FormRow, { label: 'Omit Aggregation from Header' },
|
|
196
196
|
React.createElement(CheckBox, { checked: layout.SuppressAggFuncInHeader, onChange: handleSuppressAggFuncInHeader })),
|
|
197
197
|
React.createElement(FormRow, { label: 'Grand Total Row' },
|
|
198
|
-
React.createElement(Select, { style: { width:
|
|
198
|
+
React.createElement(Select, { style: { width: 160 }, options: ['top', 'bottom', 'pinnedTop', 'pinnedBottom'].map((position) => {
|
|
199
199
|
return {
|
|
200
|
-
label: StringExtensions.
|
|
200
|
+
label: StringExtensions.CamelCaseToHumanText(position),
|
|
201
201
|
value: position,
|
|
202
202
|
};
|
|
203
203
|
}), placeholder: "Off", value: layout.GrandTotalRow, onChange: (value) => {
|
|
@@ -322,9 +322,9 @@ export const PivotAggregationsSection = (props) => {
|
|
|
322
322
|
React.createElement(FormRow, { label: 'Omit Aggregation from Header' },
|
|
323
323
|
React.createElement(CheckBox, { checked: layout.SuppressAggFuncInHeader, onChange: handleSuppressAggFuncInHeader })),
|
|
324
324
|
React.createElement(FormRow, { label: 'Grand Total Row' },
|
|
325
|
-
React.createElement(Select, { style: { width:
|
|
325
|
+
React.createElement(Select, { style: { width: 160 }, options: ['top', 'bottom', 'pinnedTop', 'pinnedBottom'].map((position) => {
|
|
326
326
|
return {
|
|
327
|
-
label: StringExtensions.
|
|
327
|
+
label: StringExtensions.CamelCaseToHumanText(position),
|
|
328
328
|
value: position,
|
|
329
329
|
};
|
|
330
330
|
}), placeholder: "Off", value: layout.GrandTotalRow, onChange: (value) => {
|
|
@@ -8,6 +8,7 @@ import { ValueSelector } from '../../../Components/ValueSelector';
|
|
|
8
8
|
import { useOnePageAdaptableWizardContext } from '../../../Wizard/OnePageAdaptableWizard';
|
|
9
9
|
import ArrayExtensions from '../../../../Utilities/Extensions/ArrayExtensions';
|
|
10
10
|
import { normalizeLayout } from '../../../../Api/Implementation/LayoutHelpers';
|
|
11
|
+
import { RowGroupBehaviorSection } from './RowGroupingSection';
|
|
11
12
|
export const PivotRowGroupingSectionSummary = () => {
|
|
12
13
|
const adaptable = useAdaptable();
|
|
13
14
|
const { data: layout } = useOnePageAdaptableWizardContext();
|
|
@@ -32,10 +33,14 @@ export const PivotRowGroupingSection = (props) => {
|
|
|
32
33
|
PivotGroupedColumns: columnIds,
|
|
33
34
|
});
|
|
34
35
|
};
|
|
36
|
+
const rowGroupsText = 'Row Group ' + adaptable.api.internalApi.getCorrectEnglishVariant('Behaviour');
|
|
35
37
|
return (React.createElement(Tabs, { style: { height: '100%' } },
|
|
36
38
|
React.createElement(Tabs.Tab, null, "Row Grouped Columns"),
|
|
39
|
+
React.createElement(Tabs.Tab, null, rowGroupsText),
|
|
37
40
|
React.createElement(Tabs.Content, null,
|
|
38
41
|
React.createElement(ValueSelector, { showFilterInput: true, showSelectedOnlyPosition: "top", filter: columnFilter, toIdentifier: (option) => `${option.columnId}`, toLabel: (option) => option.friendlyName ?? option.columnId, options: sortedGroupableColumns, value: layout.PivotGroupedColumns ?? [], allowReorder: true, xSelectedLabel: () => {
|
|
39
42
|
return `Selected Columns:`;
|
|
40
|
-
}, onChange: handleColumnsChange }))
|
|
43
|
+
}, onChange: handleColumnsChange })),
|
|
44
|
+
React.createElement(Tabs.Content, null,
|
|
45
|
+
React.createElement(RowGroupBehaviorSection, { layout: layout, onChange: onChange }))));
|
|
41
46
|
};
|
|
@@ -4,5 +4,9 @@ export declare const RowGroupingSectionSummary: React.FunctionComponent;
|
|
|
4
4
|
interface RowGroupingSectionProps {
|
|
5
5
|
onChange: (data: Layout) => void;
|
|
6
6
|
}
|
|
7
|
+
export declare const RowGroupBehaviorSection: (props: {
|
|
8
|
+
layout: Layout;
|
|
9
|
+
onChange: (data: Layout) => void;
|
|
10
|
+
}) => React.JSX.Element;
|
|
7
11
|
export declare const RowGroupingSection: React.FunctionComponent<RowGroupingSectionProps>;
|
|
8
12
|
export {};
|
|
@@ -23,6 +23,27 @@ export const RowGroupingSectionSummary = () => {
|
|
|
23
23
|
React.createElement(Tag, { key: columnId }, adaptable.api.columnApi.getFriendlyNameForColumnId(columnId))));
|
|
24
24
|
})) : (React.createElement(Tag, null, "No Row Grouping"))));
|
|
25
25
|
};
|
|
26
|
+
export const RowGroupBehaviorSection = (props) => {
|
|
27
|
+
const { layout, onChange } = props;
|
|
28
|
+
return (React.createElement(FormLayout, null,
|
|
29
|
+
React.createElement(RadioGroup, { orientation: "vertical", value: layout.RowGroupValues?.RowGroupDefaultBehavior ?? 'always-collapsed', onRadioChange: (RowGroupDefaultBehavior) => {
|
|
30
|
+
const newLayout = {
|
|
31
|
+
...layout,
|
|
32
|
+
RowGroupValues: {
|
|
33
|
+
RowGroupDefaultBehavior,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
if (newLayout.RowGroupValues.RowGroupDefaultBehavior === 'collapsed' ||
|
|
37
|
+
newLayout.RowGroupValues.RowGroupDefaultBehavior === 'expanded') {
|
|
38
|
+
newLayout.RowGroupValues.ExceptionGroupKeys = [];
|
|
39
|
+
}
|
|
40
|
+
onChange(newLayout);
|
|
41
|
+
} },
|
|
42
|
+
React.createElement(TypeRadio, { value: "always-collapsed", text: "All Collapsed", description: "Always open Layout with all Grouped Rows collapsed" }),
|
|
43
|
+
React.createElement(TypeRadio, { value: "always-expanded", text: "All Expanded", description: "Always open Layout with all Grouped Rows expanded" }),
|
|
44
|
+
React.createElement(TypeRadio, { value: "expanded", text: "Mostly Expanded", description: "Layout opens with all Grouped rows expanded, other than those collapsed when Layout last displayed" }),
|
|
45
|
+
React.createElement(TypeRadio, { value: "collapsed", text: "Mostly Collapsed", description: "Layout opens with all Grouped rows collapsed, other than those expanded when Layout last displayed" }))));
|
|
46
|
+
};
|
|
26
47
|
export const RowGroupingSection = (props) => {
|
|
27
48
|
const adaptable = useAdaptable();
|
|
28
49
|
if (adaptable.api.gridApi.isTreeDataGrid()) {
|
|
@@ -78,23 +99,5 @@ export const RowGroupingSection = (props) => {
|
|
|
78
99
|
return `Selected Columns:`;
|
|
79
100
|
}, onChange: handleColumnsChange })),
|
|
80
101
|
React.createElement(Tabs.Content, null,
|
|
81
|
-
React.createElement(
|
|
82
|
-
React.createElement(RadioGroup, { orientation: "vertical", value: layout.RowGroupValues?.RowGroupDefaultBehavior ?? 'always-collapsed', onRadioChange: (RowGroupDefaultBehavior) => {
|
|
83
|
-
let newLayout = {
|
|
84
|
-
...layout,
|
|
85
|
-
RowGroupValues: {
|
|
86
|
-
RowGroupDefaultBehavior,
|
|
87
|
-
},
|
|
88
|
-
};
|
|
89
|
-
if (newLayout.RowGroupValues.RowGroupDefaultBehavior === 'collapsed' ||
|
|
90
|
-
newLayout.RowGroupValues.RowGroupDefaultBehavior === 'expanded') {
|
|
91
|
-
newLayout.RowGroupValues.ExceptionGroupKeys =
|
|
92
|
-
[];
|
|
93
|
-
}
|
|
94
|
-
onChange(newLayout);
|
|
95
|
-
} },
|
|
96
|
-
React.createElement(TypeRadio, { value: "always-collapsed", text: "All Collapsed", description: "Always open Layout with all Grouped Rows collapsed" }),
|
|
97
|
-
React.createElement(TypeRadio, { value: "always-expanded", text: "All Expanded", description: "Always open Layout with all Grouped Rows expanded" }),
|
|
98
|
-
React.createElement(TypeRadio, { value: "expanded", text: "Mostly Expanded", description: "Layout opens with all Grouped rows expanded, other than those collapsed when Layout last displayed" }),
|
|
99
|
-
React.createElement(TypeRadio, { value: "collapsed", text: "Mostly Collapsed", description: "Layout opens with all Grouped rows collapsed, other than those expanded when Layout last displayed" })))))));
|
|
102
|
+
React.createElement(RowGroupBehaviorSection, { layout: layout, onChange: onChange })))));
|
|
100
103
|
};
|
|
@@ -4,6 +4,9 @@ import * as QuickSearchRedux from '../../Redux/ActionsReducers/QuickSearchRedux'
|
|
|
4
4
|
import { AdaptableFormControlTextClear } from '../Components/Forms/AdaptableFormControlTextClear';
|
|
5
5
|
import { useQuickSearchDebounced } from './useQuickSearchDebounced';
|
|
6
6
|
import { useAdaptable } from '../AdaptableContext';
|
|
7
|
+
import SimpleButton from '../../components/SimpleButton';
|
|
8
|
+
import join from '../../components/utils/join';
|
|
9
|
+
import { Box } from 'rebass';
|
|
7
10
|
export const QuickSearchInput = (props) => {
|
|
8
11
|
const adaptable = useAdaptable();
|
|
9
12
|
const QuickSearchText = useSelector((state) => state.QuickSearch.QuickSearchText);
|
|
@@ -13,5 +16,7 @@ export const QuickSearchInput = (props) => {
|
|
|
13
16
|
QuickSearchText,
|
|
14
17
|
onRunQuickSearch,
|
|
15
18
|
});
|
|
16
|
-
return (React.createElement(AdaptableFormControlTextClear, { type: "text", autoFocus: props.autoFocus, placeholder: adaptable.api.optionsApi.getQuickSearchOptions().quickSearchPlaceholder, className: props.className, value: searchText, OnTextChange: search, style: { height: '100%' }, inputStyle: { width: props.width ?? '10rem' } }
|
|
19
|
+
return (React.createElement(AdaptableFormControlTextClear, { "aria-label": 'Quick Search', type: "text", autoFocus: props.autoFocus, placeholder: adaptable.api.optionsApi.getQuickSearchOptions().quickSearchPlaceholder, className: join('ab-DashboardToolbar__QuickSearch__text', props.className), value: searchText, OnTextChange: search, style: { height: '100%' }, inputStyle: { width: props.width ?? '10rem' }, actionTools: React.createElement(Box, { display: "flex", flexDirection: "row", alignItems: "center", flex: 'none' },
|
|
20
|
+
React.createElement(SimpleButton, { "aria-label": 'Previous Match', icon: "arrow-up", px: 0, py: 0, mr: 1, disabled: !searchText, variant: "text", onClick: () => adaptable.api.quickSearchApi.gotoPreviousMatch() }),
|
|
21
|
+
React.createElement(SimpleButton, { "aria-label": 'Next Match', icon: "arrow-down", px: 0, py: 0, mr: 1, disabled: !searchText, variant: "text", onClick: () => adaptable.api.quickSearchApi.gotoNextMatch() })) }));
|
|
17
22
|
};
|
|
@@ -5,12 +5,12 @@ import * as QuickSearchRedux from '../../Redux/ActionsReducers/QuickSearchRedux'
|
|
|
5
5
|
import { PopupPanel } from '../Components/Popups/AdaptablePopup/PopupPanel';
|
|
6
6
|
import Panel from '../../components/Panel';
|
|
7
7
|
import FormLayout, { FormRow } from '../../components/FormLayout';
|
|
8
|
-
import { AdaptableFormControlTextClear } from '../Components/Forms/AdaptableFormControlTextClear';
|
|
9
8
|
import { StyleComponent } from '../Components/StyleComponent';
|
|
10
9
|
import { Flex } from 'rebass';
|
|
11
10
|
import { CheckBox } from '../../components/CheckBox';
|
|
12
11
|
import StringExtensions from '../../Utilities/Extensions/StringExtensions';
|
|
13
12
|
import { useQuickSearchDebounced } from './useQuickSearchDebounced';
|
|
13
|
+
import { QuickSearchInput } from './QuickSearchInput';
|
|
14
14
|
const QuickSearchPopupComponent = (props) => {
|
|
15
15
|
const [searchText, search] = useQuickSearchDebounced(props);
|
|
16
16
|
const [state, setState] = useState({
|
|
@@ -28,9 +28,8 @@ const QuickSearchPopupComponent = (props) => {
|
|
|
28
28
|
};
|
|
29
29
|
return (React.createElement(PopupPanel, { headerText: props.moduleInfo.FriendlyName, glyphicon: props.moduleInfo.Glyph, infoLink: props.moduleInfo.HelpPage, infoLinkDisabled: !props.api.internalApi.isDocumentationLinksDisplayed() },
|
|
30
30
|
React.createElement(Panel, { header: props.moduleInfo.FriendlyName + ' Text', style: { height: 'auto' }, variant: "default", borderRadius: "none", marginTop: 3, marginLeft: 2, marginRight: 2 },
|
|
31
|
-
' ',
|
|
32
31
|
React.createElement(FormLayout, null,
|
|
33
|
-
React.createElement(
|
|
32
|
+
React.createElement(QuickSearchInput, null))),
|
|
34
33
|
React.createElement(Panel, { header: props.api.internalApi.getCorrectEnglishVariant('Behaviour'), style: { height: 'auto' }, variant: "default", borderRadius: "none", marginTop: 3, marginLeft: 2, marginRight: 2 },
|
|
35
34
|
' ',
|
|
36
35
|
React.createElement(Flex, { flexDirection: "column" },
|
|
@@ -106,6 +106,7 @@ export declare class AdaptableAgGrid implements IAdaptable {
|
|
|
106
106
|
private listenerPivotChanged;
|
|
107
107
|
private listenerCellSelectionChanged;
|
|
108
108
|
private listenerSortChanged;
|
|
109
|
+
private listenerColumnGroupOpened;
|
|
109
110
|
private layoutManager;
|
|
110
111
|
private columnMinMaxValuesCache;
|
|
111
112
|
renderReactRoot: RenderReactRootFn;
|
|
@@ -303,6 +304,7 @@ export declare class AdaptableAgGrid implements IAdaptable {
|
|
|
303
304
|
isGridGroupingActive(): boolean;
|
|
304
305
|
setAgGridQuickSearch(searchText: string): void;
|
|
305
306
|
clearAgGridQuickSearch(): void;
|
|
307
|
+
setAgGridFindSearchValue(searchText: string): void;
|
|
306
308
|
applyAdaptableTheme(theme: AdaptableTheme | string): void;
|
|
307
309
|
setRowGroupColumns(columnIds: string[]): void;
|
|
308
310
|
getAllGridColumns(): Column<any>[];
|