Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Data Explorer] Merge main conflicts #4800

Merged
Changes from 1 commit
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
5c5de03
[Saved Object Service] Adds Repository Factory Provider (#4149)
bandinib-amzn Jun 5, 2023
cb27336
add category option for context menus (#4144)
sikhote Jun 6, 2023
55b293a
[CCI] Add bluebird replaces for src/plugins/saved_objects (#4026)
Nicksqain Jun 8, 2023
2322c53
Validate and correct change log after 2.8 release (#4275)
zhongnansu Jun 10, 2023
1728318
[DEVELOPER_GUIDE] resolving links (#3989)
Aigerim-ai Jun 20, 2023
b337bea
Enable data client with sample data server side (#4268)
kristenTian Jun 20, 2023
84ec854
Upgrade the backport workflow (#4343)
AMoo-Miki Jun 21, 2023
f298e7e
Hide any output from `use_node` checking for Node compatibility (#4237)
AMoo-Miki Jun 21, 2023
333e2b3
[Vis Colors] Update default color in TSVB to use `ouiPaletteColorBlin…
manasvinibs Jun 22, 2023
93d543e
Add BWC tests for 2.7 and 2.8 (#4023)
manasvinibs Jun 23, 2023
d95504c
[Vis colors] Replace vis_type_timeline colors with `ouiPaletteColorBl…
manasvinibs Jun 23, 2023
2e10b22
[Lint] add custom stylelint rules and config (#4290)
kavilla Jun 23, 2023
931b915
Fix linked deps resolution (#4342)
AMoo-Miki Jun 23, 2023
fe1f1d1
Add configurable `defaults` to `uiSettings` (#4344)
AMoo-Miki Jun 23, 2023
0b54e84
Refactor hardcode color to use OUI in `maps_legacy` (#4294)
BSFishy Jun 26, 2023
fc4e696
Remove broken flot documentation link for Ruby API (#4384)
joshuarrrr Jun 26, 2023
6cee1a9
[CCI] Fix relationships header overflow (#4070)
SergeyMyssak Jun 26, 2023
70b3420
Refactor color maps to use OUI color palettes (#4293)
BSFishy Jun 26, 2023
1ef3e9f
[CCI] Remove unused tags in the navigation plugin (#3964)
andreymyssak Jun 27, 2023
d285ecb
[Stylelint] Add invalid properties rule (#4374)
BSFishy Jun 27, 2023
a44b09f
Migrate from legacy elasticsearch client to opensearch-js client in `…
manasvinibs Jun 27, 2023
e33b643
Chore (deps): Bump OUI to 1.1.2 to add anomoly detection icon (#4408)
joshuarrrr Jun 27, 2023
29d7a4b
Excludes broken sass-lang link from Link checker (#4415)
ashwin-pc Jun 28, 2023
88e2b2d
[Vis Colors] Update legacy seed colors to use `ouiPaletteColorBlind()…
manasvinibs Jun 28, 2023
d5ca03a
Release notes for 1.3.11 (#4423) (#4427)
opensearch-trigger-bot[bot] Jun 28, 2023
dcdc68d
Updates Release notes for 1.3.11 (#4428) (#4430)
opensearch-trigger-bot[bot] Jun 28, 2023
d95f642
[Stylelint] Add typing to Stylelint rules (#4392)
BSFishy Jun 28, 2023
5e8a4fd
[Vis colors] Update legacy mapped colors in charts plugin to use ouiP…
manasvinibs Jun 28, 2023
c75a025
[CVE-2022-25883] Resolve semver to 7.5.3 and remove unused package (#…
ananzh Jun 29, 2023
7c8aa4a
Enable sample data with Multiple datasource frontend (#4412)
kristenTian Jun 29, 2023
f6e22cb
Feature (home): Add vis audit sample dashboard (#4339)
joshuarrrr Jun 29, 2023
63b66f9
Add fonts for previewing the new theme (#4381)
AMoo-Miki Jun 30, 2023
1f1b333
possible fix for flakey ci9 test (#4450)
ashwin-pc Jun 30, 2023
4a778a7
Chore (VisBuilder): Update icon to use OUI icon (#4446)
joshuarrrr Jun 30, 2023
79988ed
Relocate tutorials imagery (#4382)
AMoo-Miki Jul 1, 2023
bbf8dfb
Update main menu to display 'Dashboards' for consistency (#4453)
gulderov Jul 1, 2023
3f357b5
Adding Matt as a maintainer (#4469)
ashwin-pc Jul 1, 2023
021671a
Add `color-scheme` to the root styling (#4477)
AMoo-Miki Jul 3, 2023
1560a6c
Refactor hardcoded color to use OUI in `region_map` (#4299)
BSFishy Jul 3, 2023
e07c5e6
[Console] Convert lib/mappings to TypeScript (#4008)
curq Jul 5, 2023
1358135
Enable plugins to augment visualizations with additional data and con…
ohltyler Jul 6, 2023
c9cbf31
Update header logo selection logic and assets (#4383)
AMoo-Miki Jul 7, 2023
24bde32
[CI] Split build and verify into parallel jobs (#4467)
AMoo-Miki Jul 7, 2023
d8f0c48
New management overview page and rename stack management to dashboard…
Hailong-am Jul 7, 2023
a509588
Retain the original sample data interface (#4526)
kristenTian Jul 9, 2023
1dc1060
[Vis Augmenter Add UT for few fns (#4516)
ohltyler Jul 10, 2023
9bc61b4
Bump tough-cookie from 4.0.0 to 4.1.3 (#4531)
dependabot[bot] Jul 10, 2023
6ae64b3
[Vis Augmenter] Update base vis height in view events flyout (#4535)
ohltyler Jul 10, 2023
1d41cfe
Dashboard De-Angularization (#4502)
abbyhu2000 Jul 11, 2023
c583838
Add v2.9.0 release notes (#4550)
manasvinibs Jul 12, 2023
b94a62f
Fix line to vega conversion bug (#4554)
lezzago Jul 12, 2023
d746595
Fix Node.js download link (#4556)
AMoo-Miki Jul 12, 2023
72e7068
[Vis Augmenter] Fix stats API visualization ID bug (#4565)
ohltyler Jul 13, 2023
41b1eda
[CCI] Add new or remove extra tags and styles in `saved_objects_manag…
SergeyMyssak Jul 13, 2023
0ab3233
Add documentation to vis_augmenter (#4527)
ohltyler Jul 14, 2023
1249d3d
[Vis Augmenter] Fix bug of undefined tooltip when all plugin layers a…
ohltyler Jul 14, 2023
2b725a9
[Dashboards] restructure folder to be more cohesive with the project …
kavilla Jul 17, 2023
e451d13
chore (home): Update visual consistency dashboard TSVB colors (#4501)
joshuarrrr Jul 18, 2023
78ffbf5
[VisLib] Replace legend color palette with OUI color palette (#4365)
joshuarrrr Jul 18, 2023
6849437
Bump word-wrap from 1.2.3 to 1.2.4 (#4589)
dependabot[bot] Jul 19, 2023
22a8943
Removed KUI usage in maps_legacy plugin (#3998)
miamia1999 Jul 19, 2023
feadcb4
Feature (home): Update visual consistency sample dashboard with more …
joshuarrrr Jul 19, 2023
f13e4c3
Optimize `augment-vis` saved obj searching by adding arg to saved obj…
ohltyler Jul 20, 2023
adb538e
[Markdown] Replace custom css styles and native html with OUI. (#4390)
curq Jul 20, 2023
c06b298
Add resource ID filtering in fetch `augment-vis` obj queries (#4608)
ohltyler Jul 24, 2023
f8ad83f
Fix (styles): Make ace code editor themes consistent (#4609)
joshuarrrr Jul 24, 2023
fe41677
Enable theme-switching via Advanced Settings to preview the Next them…
AMoo-Miki Jul 25, 2023
d94d7cb
[Console] Converted all ```/lib/autocomplete/**/*.js``` files to type…
curq Jul 25, 2023
5c2b22b
[Console] Convert all non-autocomplete lib files to typescript (#4150)
curq Jul 26, 2023
c3ea363
[Table Visualization] Replace div containers with OuiFlex components …
curq Jul 26, 2023
e2abd27
Chore(CHANGELOG): Update to CHANGELOG post 2.9 release (#4625)
manasvinibs Jul 26, 2023
983fc34
Refactor/remove breadcrumb styling main (#4621)
joshuarrrr Jul 26, 2023
6bab7ef
Feat (home): Add remaining vis type examples (#4619)
joshuarrrr Jul 26, 2023
92507a2
[i18n] fix generation scripts (#4252)
kavilla Jul 28, 2023
a52e95c
Feat (Discover): Update styles to be compatible with next theme (#4644)
joshuarrrr Aug 1, 2023
fc238b0
Fix (Legacy Maps): Add necessary specificity for dark mode style over…
joshuarrrr Aug 3, 2023
bf6e887
Bump `node-sass` to a version that uses a newer `libsass` (#4651)
AMoo-Miki Aug 3, 2023
e867585
Update webpack environment targets (#4649)
AMoo-Miki Aug 3, 2023
4bc1f55
Reduce the amount of comments in compiled CSS (#4648)
AMoo-Miki Aug 3, 2023
324919d
units test for utils folder (#4641)
abbyhu2000 Aug 4, 2023
04065fa
Fix --font-text CSS var usage and add more leaflet font overrides (#4…
joshuarrrr Aug 7, 2023
d8c7f48
Add saved objects service status api (#4696)
bandinib-amzn Aug 9, 2023
9253a37
Chore: Add 1.3.12 release notes (#4690) (#4709)
opensearch-trigger-bot[bot] Aug 10, 2023
b038322
Test (linkchecker): Exclude checking dead link (#4720)
joshuarrrr Aug 14, 2023
1674c97
[@osd/pm] Automate multi-target bootstrap and build (#4650)
AMoo-Miki Aug 14, 2023
1c8903d
[chore] Update CHANGELOG.md with 1.3.12 release (#4739)
manasvinibs Aug 15, 2023
ca70d5e
Feat (home): Remove color customizations from sample dashboards (#4741)
joshuarrrr Aug 15, 2023
7f1d85b
Bump version of tinygradient from 0.4.3 to 1.1.5 (#4742)
BSFishy Aug 16, 2023
454fdfb
Remove visualization editor background (#4719)
BSFishy Aug 16, 2023
86a3f1e
[Dashboard De-Angular] Add unit tests for dashboard_listing and dashb…
abbyhu2000 Aug 17, 2023
06a4903
[Stylelint] Add no_restricted_values linter rule (#4413)
BSFishy Aug 17, 2023
ff40d7c
Add @curq as co-maintainer (#4760)
joshuarrrr Aug 17, 2023
a9a8122
[Tests] Add BWC tests for 2.9 and 2.10 versions (#4762)
manasvinibs Aug 18, 2023
061e476
Updated README.md (#4769)
suyash5053 Aug 18, 2023
d7c5577
Refactor logo usage (#4702)
AMoo-Miki Aug 22, 2023
55a6825
Merge remote-tracking branch 'upstream/main' into merge-main-conflicts
ashwin-pc Aug 23, 2023
0b1bacc
fixes merge conflict resolution error
ashwin-pc Aug 23, 2023
73f82a6
fixes snapshot
ashwin-pc Aug 23, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add configurable defaults to uiSettings (#4344)
Also now:
* `theme:darkMode` and `theme:version` can be configured via `defaults`
* unauthenticated users are no longer forced to light mode

Signed-off-by: Miki <[email protected]>
AMoo-Miki authored Jun 23, 2023

Verified

This commit was signed with the committer’s verified signature.
truthbk Jaime Fullaondo
commit fe1f1d18ea9b26ddb19ae805f676b6e09798b294
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -24,6 +24,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- [Saved Object Service] Add Repository Factory Provider ([#4149](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4149))
- [@osd/pm] Fix `file:`-linked dependencies' resolution to improve ability to test with local packages ([#4342](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4342))
- [Multiple DataSource] Backend support for adding sample data ([#4268](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4268))
- Add configurable defaults and overrides to uiSettings ([#4344](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4344))

### 🐛 Bug Fixes

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 29 additions & 0 deletions src/core/server/rendering/rendering_service.test.ts
Original file line number Diff line number Diff line change
@@ -106,15 +106,44 @@ describe('RenderingService', () => {
expect(data).toMatchSnapshot(INJECTED_METADATA);
});

it('renders "core" page driven by defaults', async () => {
uiSettings.getUserProvided.mockResolvedValue({ 'theme:darkMode': { userValue: false } });
uiSettings.getOverrideOrDefault.mockImplementation((name) => name === 'theme:darkMode');
const content = await render(createOpenSearchDashboardsRequest(), uiSettings, {
includeUserSettings: false,
});
const dom = load(content);
const data = JSON.parse(dom('osd-injected-metadata').attr('data') || '');

expect(uiSettings.getUserProvided).not.toHaveBeenCalled();
expect(data).toMatchSnapshot(INJECTED_METADATA);
});

it('renders "core" page driven by settings', async () => {
uiSettings.getUserProvided.mockResolvedValue({ 'theme:darkMode': { userValue: true } });
uiSettings.getRegistered.mockReturnValue({ 'theme:darkMode': { value: false } });
const content = await render(createOpenSearchDashboardsRequest(), uiSettings);
const dom = load(content);
const data = JSON.parse(dom('osd-injected-metadata').attr('data') || '');

expect(data).toMatchSnapshot(INJECTED_METADATA);
});

it('renders "core" page with no defaults or overrides', async () => {
uiSettings.getUserProvided.mockResolvedValue({});
uiSettings.getOverrideOrDefault.mockImplementation((name) =>
name === 'theme:darkMode' ? undefined : false
);
const content = await render(createOpenSearchDashboardsRequest(), uiSettings, {
includeUserSettings: false,
});
const dom = load(content);
const data = JSON.parse(dom('osd-injected-metadata').attr('data') || '');

expect(uiSettings.getUserProvided).not.toHaveBeenCalled();
expect(data).toMatchSnapshot(INJECTED_METADATA);
});

it('renders "core" with excluded user settings', async () => {
const content = await render(createOpenSearchDashboardsRequest(), uiSettings, {
includeUserSettings: false,
8 changes: 5 additions & 3 deletions src/core/server/rendering/rendering_service.tsx
Original file line number Diff line number Diff line change
@@ -95,9 +95,11 @@ export class RenderingService {
defaults: uiSettings.getRegistered(),
user: includeUserSettings ? await uiSettings.getUserProvided() : {},
};
const darkMode = settings.user?.['theme:darkMode']?.userValue
? Boolean(settings.user['theme:darkMode'].userValue)
: false;
// Cannot use `uiSettings.get()` since a user might not be authenticated
const darkMode =
(settings.user?.['theme:darkMode']?.userValue ??
uiSettings.getOverrideOrDefault('theme:darkMode')) ||
false;

const brandingAssignment = await this.assignBrandingConfig(
darkMode,
6 changes: 5 additions & 1 deletion src/core/server/ui_settings/types.ts
Original file line number Diff line number Diff line change
@@ -52,9 +52,13 @@ export {
*/
export interface IUiSettingsClient {
/**
* Returns registered uiSettings values {@link UiSettingsParams}
* Returns all registered uiSettings values {@link UiSettingsParams}
*/
getRegistered: () => Readonly<Record<string, PublicUiSettingsParams>>;
/**
* Returns the overridden uiSettings value if one exists, or the registered default if one exists {@link UiSettingsParams}
*/
getOverrideOrDefault: (key: string) => unknown;
/**
* Retrieves uiSettings values set by the user with fallbacks to default values if not specified.
*/
19 changes: 19 additions & 0 deletions src/core/server/ui_settings/ui_settings_client.test.ts
Original file line number Diff line number Diff line change
@@ -333,6 +333,25 @@ describe('ui settings', () => {
});
});

describe('#getOverrideOrDefault()', () => {
it('returns the non-overridden default settings passed within the constructor', () => {
const value = chance.word();
const defaults = { key: { value } };
const { uiSettings } = setup({ defaults });
expect(uiSettings.getOverrideOrDefault('key')).toEqual(value);
expect(uiSettings.getOverrideOrDefault('unknown')).toBeUndefined();
});

it('returns the overridden settings passed within the constructor', () => {
const value = chance.word();
const override = chance.word();
const defaults = { key: { value } };
const overrides = { key: { value: override } };
const { uiSettings } = setup({ defaults, overrides });
expect(uiSettings.getOverrideOrDefault('key')).toEqual(override);
});
});

describe('#getUserProvided()', () => {
it('pulls user configuration from OpenSearch', async () => {
const { uiSettings, savedObjectsClient } = setup();
4 changes: 4 additions & 0 deletions src/core/server/ui_settings/ui_settings_client.ts
Original file line number Diff line number Diff line change
@@ -91,6 +91,10 @@ export class UiSettingsClient implements IUiSettingsClient {
return copiedDefaults;
}

getOverrideOrDefault(key: string): unknown {
return this.isOverridden(key) ? this.overrides[key].value : this.defaults[key]?.value;
}

async get<T = any>(key: string): Promise<T> {
const all = await this.getAll();
return all[key];
20 changes: 20 additions & 0 deletions src/core/server/ui_settings/ui_settings_config.ts
Original file line number Diff line number Diff line change
@@ -37,13 +37,33 @@ const deprecations: ConfigDeprecationProvider = ({ unused, renameFromRoot }) =>
renameFromRoot('server.defaultRoute', 'uiSettings.overrides.defaultRoute'),
];

/* There are 4 levels of uiSettings:
* 1) defaults hardcoded in code
* 2) defaults provided in the opensearch_dashboards.yml
* 3) values selected by the user and received from savedObjects
* 4) overrides provided in the opensearch_dashboards.yml
*
* Each of these levels override the one above them.
*
* The schema below exposes only a limited set of settings to be set in the config file.
*
* ToDo: Remove overrides; these were added to force the lock down the theme version.
* The schema is temporarily relaxed to allow overriding the `darkMode` and setting
* `defaults`. An upcoming change would relax them further to allow setting them.
*/

const configSchema = schema.object({
overrides: schema.object(
{
'theme:darkMode': schema.maybe(schema.boolean({ defaultValue: true })),
'theme:version': schema.string({ defaultValue: 'v7' }),
},
{ unknowns: 'allow' }
),
defaults: schema.object({
'theme:darkMode': schema.maybe(schema.boolean({ defaultValue: false })),
'theme:version': schema.maybe(schema.string({ defaultValue: 'v7' })),
}),
});

export type UiSettingsConfigType = TypeOf<typeof configSchema>;
1 change: 1 addition & 0 deletions src/core/server/ui_settings/ui_settings_service.mock.ts
Original file line number Diff line number Diff line change
@@ -39,6 +39,7 @@ import { UiSettingsService } from './ui_settings_service';
const createClientMock = () => {
const mocked: jest.Mocked<IUiSettingsClient> = {
getRegistered: jest.fn(),
getOverrideOrDefault: jest.fn(),
get: jest.fn(),
getAll: jest.fn(),
getUserProvided: jest.fn(),
42 changes: 41 additions & 1 deletion src/core/server/ui_settings/ui_settings_service.test.ts
Original file line number Diff line number Diff line change
@@ -46,7 +46,7 @@ const overrides = {
overrideBaz: 'baz',
};

const defaults = {
const defaults: Record<string, any> = {
foo: {
name: 'foo',
value: 'bar',
@@ -97,6 +97,21 @@ describe('uiSettings', () => {
);
});
});

it('fails if configured default was not previously defined', async () => {
const coreContext = mockCoreContext.create();
coreContext.configService.atPath.mockReturnValueOnce(
new BehaviorSubject({
defaults: {
foo: 'configured',
},
})
);
const customizedService = new UiSettingsService(coreContext);
await expect(customizedService.setup(setupDeps)).rejects.toMatchInlineSnapshot(
`[Error: [ui settings defaults [foo]: expected key to be have been registered]`
);
});
});

describe('#start', () => {
@@ -168,6 +183,31 @@ describe('uiSettings', () => {
expect(MockUiSettingsClientConstructor.mock.calls[0][0].defaults).toEqual(defaults);
expect(MockUiSettingsClientConstructor.mock.calls[0][0].defaults).not.toBe(defaults);
});

it('passes configured defaults to UiSettingsClient', async () => {
const defaultsClone: Record<string, any> = {};
Object.keys(defaults).forEach((key: string) => {
defaultsClone[key] = { ...defaults[key] };
});

getCoreSettingsMock.mockReturnValue(defaultsClone);
const coreContext = mockCoreContext.create();
coreContext.configService.atPath.mockReturnValueOnce(
new BehaviorSubject({
defaults: {
foo: 'configured',
},
})
);
const customizedService = new UiSettingsService(coreContext);
await customizedService.setup(setupDeps);
const start = await customizedService.start();
start.asScopedToClient(savedObjectsClient);
expect(MockUiSettingsClientConstructor).toBeCalledTimes(1);
expect(MockUiSettingsClientConstructor.mock.calls[0][0].defaults?.foo?.value).toEqual(
'configured'
);
});
});
});
});
18 changes: 17 additions & 1 deletion src/core/server/ui_settings/ui_settings_service.ts
Original file line number Diff line number Diff line change
@@ -75,7 +75,10 @@ export class UiSettingsService
this.register(getCoreSettings());

const config = await this.config$.pipe(first()).toPromise();
this.overrides = config.overrides;
this.overrides = config.overrides || {};

// Use uiSettings.defaults from the config file
this.validateAndUpdateConfiguredDefaults(config.defaults);

return {
register: this.register.bind(this),
@@ -134,4 +137,17 @@ export class UiSettingsService
}
}
}

private validateAndUpdateConfiguredDefaults(defaults: Record<string, any> = {}) {
for (const [key, value] of Object.entries(defaults)) {
const definition = this.uiSettingsDefaults.get(key);
if (!definition)
throw new Error(`[ui settings defaults [${key}]: expected key to be have been registered`);

if (definition.schema) {
definition.schema.validate(value, {}, `ui settings configuration [${key}]`);
}
definition.value = value;
}
}
}
2 changes: 1 addition & 1 deletion src/legacy/ui/ui_render/ui_render_mixin.js
Original file line number Diff line number Diff line change
@@ -95,7 +95,7 @@ export function uiRenderMixin(osdServer, server, config) {
const darkMode =
!authEnabled || request.auth.isAuthenticated
? await uiSettings.get('theme:darkMode')
: false;
: uiSettings.getOverrideOrDefault('theme:darkMode');

const themeVersion =
!authEnabled || request.auth.isAuthenticated ? await uiSettings.get('theme:version') : 'v7';