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

Per User Dark Mode Preference #151507

Merged
merged 69 commits into from
Apr 25, 2023
Merged
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
de37d80
v1 tracer
kc13greiner Feb 13, 2023
105cb80
Adding comments and clean-up
kc13greiner Feb 16, 2023
fccecf4
Removing unused console log
kc13greiner Feb 16, 2023
b8bdc52
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Feb 16, 2023
d64e703
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Feb 16, 2023
3f9a94e
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Feb 16, 2023
93dc347
Circular reference?
kc13greiner Feb 16, 2023
9917e06
[CI] Auto-commit changed files from 'node scripts/precommit_hook.js -…
kibanamachine Feb 16, 2023
f77fe84
Comment updates and remove interface implementation in search of circ…
kc13greiner Feb 16, 2023
859a52c
[CI] Auto-commit changed files from 'node scripts/precommit_hook.js -…
kibanamachine Feb 16, 2023
223b044
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Feb 16, 2023
21d57b8
Moving types around and renaming
kc13greiner Feb 23, 2023
f6e5bc0
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Feb 23, 2023
00a2487
Unnecessary code removal and using import type notation
kc13greiner Feb 23, 2023
46f328c
Reverting unnecessary comment/spacing fixes. Fixing own commments
kc13greiner Feb 23, 2023
5debac8
Adding logging, changing how request is added, and pushing down logic…
kc13greiner Feb 27, 2023
3ff44ba
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Feb 27, 2023
641ae67
Removing sec plugin references from files
kc13greiner Feb 27, 2023
50dd1a5
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Feb 27, 2023
f13157b
Adding form components for theme on UserProfile
kc13greiner Feb 28, 2023
c420176
Fixing form field
kc13greiner Feb 28, 2023
6e2db48
Adding reload toast when Theme is changed
kc13greiner Feb 28, 2023
871bfb8
Cleaning up comments
kc13greiner Feb 28, 2023
ad9c51f
Reverting unnecessary change
kc13greiner Feb 28, 2023
2dd9bf9
One last comment update
kc13greiner Feb 28, 2023
300b6e8
Code review feedback
kc13greiner Mar 10, 2023
9a14abf
Unit tests for UiSettingsService, RenderingService, UiSettingsUserClient
kc13greiner Mar 13, 2023
e989532
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Mar 13, 2023
e818183
Fixing missing types
kc13greiner Mar 13, 2023
7698836
Fixing type checks
kc13greiner Mar 22, 2023
26bf454
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Mar 23, 2023
3dd2db6
matching snapshots
kc13greiner Mar 23, 2023
25deb64
Adding `user` type, but hiding/disabling it
kc13greiner Mar 23, 2023
51b1c70
Adding tests and fixing ts-ignore
kc13greiner Mar 27, 2023
ba7b5e7
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Mar 27, 2023
294379c
Adding test to verify that the reload toast shows up when darkmode is…
kc13greiner Mar 27, 2023
2868c4c
Adding some js docs
kc13greiner Mar 27, 2023
19dc191
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Mar 27, 2023
d287b61
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Apr 19, 2023
b0a3c96
PR Feedback: refactor UISettingsClient into Core UserSettingsService
kc13greiner Apr 19, 2023
34667b8
Removing merge conflict
kc13greiner Apr 19, 2023
29ee472
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Apr 19, 2023
794aaaf
[CI] Auto-commit changed files from 'node scripts/generate codeowners'
kibanamachine Apr 19, 2023
eb2a645
adding userSettings to mock
kc13greiner Apr 19, 2023
b2538bf
Removing remaining references to user ui client
kc13greiner Apr 19, 2023
be9799c
removing old uiSettings user references
kc13greiner Apr 19, 2023
6727ec9
PR Feedback changes
kc13greiner Apr 21, 2023
8b11cc6
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Apr 21, 2023
bddbe43
[CI] Auto-commit changed files from 'node scripts/generate codeowners'
kibanamachine Apr 21, 2023
3b67a10
Removing legacy reference
kc13greiner Apr 21, 2023
5595551
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Apr 21, 2023
ab6009b
removing old import
kc13greiner Apr 21, 2023
af580d0
Fixing import
kc13greiner Apr 21, 2023
bf2de5f
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Apr 21, 2023
a5b67ea
Update x-pack/plugins/security/public/account_management/user_profile…
kc13greiner Apr 24, 2023
f8793cf
Update x-pack/plugins/security/public/account_management/user_profile…
kc13greiner Apr 24, 2023
ded0e8b
Update x-pack/plugins/security/public/account_management/user_profile…
kc13greiner Apr 24, 2023
32b04fc
Update x-pack/plugins/security/public/account_management/user_profile…
kc13greiner Apr 24, 2023
498c9c0
Update x-pack/plugins/security/public/account_management/user_profile…
kc13greiner Apr 24, 2023
3b5ed27
Changing button order and form control order based on PR feedback
kc13greiner Apr 24, 2023
ff0a571
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Apr 24, 2023
026d562
PR feedback on messaging
kc13greiner Apr 25, 2023
0b9c993
Providing UserSettingsServiceSetup to the bootstrap_renderer so the p…
kc13greiner Apr 25, 2023
ca952f3
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Apr 25, 2023
c076fcd
PR feedback
kc13greiner Apr 25, 2023
084ed22
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Apr 25, 2023
0aa3a56
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Apr 25, 2023
0a4cb6d
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Apr 25, 2023
f035146
Merge branch 'main' into feature/darkmode_discovery
kc13greiner Apr 25, 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
3 changes: 3 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,9 @@ packages/core/usage-data/core-usage-data-base-server-internal @elastic/kibana-co
packages/core/usage-data/core-usage-data-server @elastic/kibana-core
packages/core/usage-data/core-usage-data-server-internal @elastic/kibana-core
packages/core/usage-data/core-usage-data-server-mocks @elastic/kibana-core
packages/core/user-settings/core-user-settings-server @elastic/platform-security
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be @elastic/kibana-security

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One day I'll remember our team name 😆 Great catch, fixed in latest commit!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not up to date in the latest revision

packages/core/user-settings/core-user-settings-server-internal @elastic/platform-security
packages/core/user-settings/core-user-settings-server-mocks @elastic/platform-security
x-pack/plugins/cross_cluster_replication @elastic/platform-deployment-management
packages/kbn-crypto @elastic/kibana-security
packages/kbn-crypto-browser @elastic/kibana-core
Expand Down
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,9 @@
"@kbn/core-usage-data-base-server-internal": "link:packages/core/usage-data/core-usage-data-base-server-internal",
"@kbn/core-usage-data-server": "link:packages/core/usage-data/core-usage-data-server",
"@kbn/core-usage-data-server-internal": "link:packages/core/usage-data/core-usage-data-server-internal",
"@kbn/core-user-settings-server": "link:packages/core/user-settings/core-user-settings-server",
"@kbn/core-user-settings-server-internal": "link:packages/core/user-settings/core-user-settings-server-internal",
"@kbn/core-user-settings-server-mocks": "link:packages/core/user-settings/core-user-settings-server-mocks",
"@kbn/cross-cluster-replication-plugin": "link:x-pack/plugins/cross_cluster_replication",
"@kbn/crypto": "link:packages/kbn-crypto",
"@kbn/crypto-browser": "link:packages/kbn-crypto-browser",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import type { InternalStatusServiceSetup } from '@kbn/core-status-server-interna
import type { InternalUiSettingsServiceSetup } from '@kbn/core-ui-settings-server-internal';
import type { InternalCoreUsageDataSetup } from '@kbn/core-usage-data-base-server-internal';
import type { InternalCustomBrandingSetup } from '@kbn/core-custom-branding-server-internal';
import type { InternalUserSettingsServiceSetup } from '@kbn/core-user-settings-server-internal';

/** @internal */
export interface InternalCoreSetup {
Expand All @@ -47,4 +48,5 @@ export interface InternalCoreSetup {
deprecations: InternalDeprecationsServiceSetup;
coreUsageData: InternalCoreUsageDataSetup;
customBranding: InternalCustomBrandingSetup;
userSettings: InternalUserSettingsServiceSetup;
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@
"@kbn/core-usage-data-base-server-internal",
"@kbn/core-usage-data-server",
"@kbn/core-custom-branding-server-internal",
"@kbn/core-custom-branding-server"
"@kbn/core-custom-branding-server",
"@kbn/core-user-settings-server-internal"
],
"exclude": [
"target/**/*",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import { executionContextServiceMock } from '@kbn/core-execution-context-server-
import { coreUsageDataServiceMock } from '@kbn/core-usage-data-server-mocks';
import { customBrandingServiceMock } from '@kbn/core-custom-branding-server-mocks';
import { createCoreStartMock } from './core_start.mock';
import { userSettingsServiceMock } from '@kbn/core-user-settings-server-mocks';

type CoreSetupMockType = MockedKeys<CoreSetup> & {
elasticsearch: ReturnType<typeof elasticsearchServiceMock.createSetup>;
Expand Down Expand Up @@ -53,6 +54,7 @@ export function createCoreSetupMock({
analytics: analyticsServiceMock.createAnalyticsServiceSetup(),
capabilities: capabilitiesServiceMock.createSetupContract(),
customBranding: customBrandingServiceMock.createSetupContract(),
userSettings: userSettingsServiceMock.createSetupContract(),
docLinks: docLinksServiceMock.createSetupContract(),
elasticsearch: elasticsearchServiceMock.createSetup(),
http: httpMock,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import { statusServiceMock } from '@kbn/core-status-server-mocks';
import { uiSettingsServiceMock } from '@kbn/core-ui-settings-server-mocks';
import { coreUsageDataServiceMock } from '@kbn/core-usage-data-server-mocks';
import { customBrandingServiceMock } from '@kbn/core-custom-branding-server-mocks';
import { userSettingsServiceMock } from '@kbn/core-user-settings-server-mocks';

export function createInternalCoreSetupMock() {
const setupDeps = {
Expand All @@ -47,6 +48,7 @@ export function createInternalCoreSetupMock() {
executionContext: executionContextServiceMock.createInternalSetupContract(),
coreUsageData: coreUsageDataServiceMock.createSetupContract(),
customBranding: customBrandingServiceMock.createSetupContract(),
userSettings: userSettingsServiceMock.createSetupContract(),
};
return setupDeps;
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"@kbn/core-http-request-handler-context-server",
"@kbn/core-logging-server-mocks",
"@kbn/core-custom-branding-server-mocks",
"@kbn/core-user-settings-server-mocks",
],
"exclude": [
"target/**/*",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { StatusServiceSetup } from '@kbn/core-status-server';
import { UiSettingsServiceSetup } from '@kbn/core-ui-settings-server';
import { CoreUsageDataSetup } from '@kbn/core-usage-data-server';
import { CustomBrandingSetup } from '@kbn/core-custom-branding-server';
import { UserSettingsServiceSetup } from '@kbn/core-user-settings-server';
import { CoreStart } from './core_start';

/**
Expand Down Expand Up @@ -64,6 +65,8 @@ export interface CoreSetup<TPluginsStart extends object = object, TStart = unkno
status: StatusServiceSetup;
/** {@link UiSettingsServiceSetup} */
uiSettings: UiSettingsServiceSetup;
/** {@link UserSettingsServiceSetup} */
userSettings: UserSettingsServiceSetup;
/** {@link DeprecationsServiceSetup} */
deprecations: DeprecationsServiceSetup;
/** {@link StartServicesAccessor} */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
"@kbn/core-status-server",
"@kbn/core-ui-settings-server",
"@kbn/core-usage-data-server",
"@kbn/core-custom-branding-server"
"@kbn/core-custom-branding-server",
"@kbn/core-user-settings-server"
],
"exclude": [
"target/**/*",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import type { IContextProvider, IRouterWithVersion } from '@kbn/core-http-server
import { PluginInitializerContext, PluginManifest } from '@kbn/core-plugins-server';
import { CorePreboot, CoreSetup, CoreStart } from '@kbn/core-lifecycle-server';
import type { RequestHandlerContext } from '@kbn/core-http-request-handler-context-server';
import type { UserProfileSettingsClientContract } from '@kbn/core-user-settings-server-internal';
import { PluginWrapper } from './plugin';
import {
PluginsServicePrebootSetupDeps,
Expand Down Expand Up @@ -259,6 +260,10 @@ export function createPluginSetupContext<TPlugin, TPluginDependencies>(
register: deps.uiSettings.register,
registerGlobal: deps.uiSettings.registerGlobal,
},
userSettings: {
setUserProfileSettings: (client: UserProfileSettingsClientContract) =>
deps.userSettings.setUserProfileSettings(client),
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIT: unless the contract API is now a closure, this could be shortened to:

userSettings: {
    setUserProfileSettings: deps.userSettings.setUserProfileSettings,
},

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

++ fixed in latest commit!

getStartServices: () => plugin.startDependencies,
deprecations: deps.deprecations.getRegistry(plugin.name),
coreUsageData: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
"@kbn/core-node-server-internal",
"@kbn/core-plugins-base-server-internal",
"@kbn/repo-packages",
"@kbn/core-user-settings-server-internal",
],
"exclude": [
"target/**/*",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,108 @@ function renderTestCases(
});
}

function renderDarkModeTestCases(
getRender: () => Promise<
[
InternalRenderingServicePreboot['render'] | InternalRenderingServiceSetup['render'],
typeof mockRenderingPrebootDeps | typeof mockRenderingSetupDeps
]
>
) {
describe('render() Dark Mode tests', () => {
let uiSettings: {
client: ReturnType<typeof uiSettingsServiceMock.createClient>;
globalClient: ReturnType<typeof uiSettingsServiceMock.createClient>;
};

beforeEach(async () => {
uiSettings = {
client: uiSettingsServiceMock.createClient(),
globalClient: uiSettingsServiceMock.createClient(),
};
uiSettings.client.getRegistered.mockReturnValue({
registered: { name: 'title' },
});
});

describe('Dark Mode', () => {
it('User settings should override the space setting', async () => {
mockRenderingSetupDeps.userSettings.getUserSettingDarkMode.mockReturnValueOnce(
Promise.resolve('dark')
);

getSettingValueMock.mockImplementation((settingName: string) => {
if (settingName === 'theme:darkMode') {
return false;
}
return settingName;
});

const settings = { 'theme:darkMode': { userValue: false } };
uiSettings.client.getUserProvided.mockResolvedValue(settings);

const [render] = await getRender();
await render(createKibanaRequest(), uiSettings);

expect(getStylesheetPathsMock).toHaveBeenCalledWith({
darkMode: true,
themeVersion: 'v8',
basePath: '/mock-server-basepath',
buildNum: expect.any(Number),
});
});

it('Space setting should if UsersSettings is undefined', async () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIT: typo? should what?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😅 fixed in latest commit

mockRenderingSetupDeps.userSettings.getUserSettingDarkMode.mockReturnValueOnce(
Promise.resolve(undefined)
);
getSettingValueMock.mockImplementation((settingName: string) => {
if (settingName === 'theme:darkMode') {
return false;
}
return settingName;
});

const settings = { 'theme:darkMode': { userValue: false } };
uiSettings.client.getUserProvided.mockResolvedValue(settings);
const [render] = await getRender();
await render(createKibanaRequest(), uiSettings);

expect(getStylesheetPathsMock).toHaveBeenCalledWith({
darkMode: false,
themeVersion: 'v8',
basePath: '/mock-server-basepath',
buildNum: expect.any(Number),
});
});

it('Space setting should if User Setting is `empty`', async () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIT: same, typo?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😅 fixed in latest commit

mockRenderingSetupDeps.userSettings.getUserSettingDarkMode.mockReturnValueOnce(
Promise.resolve('')
);
getSettingValueMock.mockImplementation((settingName: string) => {
if (settingName === 'theme:darkMode') {
return true;
}
return settingName;
});

const settings = { 'theme:darkMode': { userValue: true } };
uiSettings.client.getUserProvided.mockResolvedValue(settings);
const [render] = await getRender();
await render(createKibanaRequest(), uiSettings);

expect(getStylesheetPathsMock).toHaveBeenCalledWith({
darkMode: true,
themeVersion: 'v8',
basePath: '/mock-server-basepath',
buildNum: expect.any(Number),
});
});
});
});
}

describe('RenderingService', () => {
let service: RenderingService;

Expand Down Expand Up @@ -231,5 +333,9 @@ describe('RenderingService', () => {
await service.preboot(mockRenderingPrebootDeps);
return [(await service.setup(mockRenderingSetupDeps)).render, mockRenderingSetupDeps];
});
renderDarkModeTestCases(async () => {
await service.preboot(mockRenderingPrebootDeps);
return [(await service.setup(mockRenderingSetupDeps)).render, mockRenderingSetupDeps];
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import type { KibanaRequest, HttpAuth } from '@kbn/core-http-server';
import type { IUiSettingsClient } from '@kbn/core-ui-settings-server';
import type { UiPlugins } from '@kbn/core-plugins-base-server-internal';
import { CustomBranding } from '@kbn/core-custom-branding-common';
import { UserProvidedValues } from '@kbn/core-ui-settings-common';
import { Template } from './views';
import {
IRenderOptions,
Expand All @@ -34,7 +35,12 @@ import type { InternalRenderingRequestHandlerContext } from './internal_types';

type RenderOptions =
| RenderingSetupDeps
| (RenderingPrebootDeps & { status?: never; elasticsearch?: never; customBranding?: never });
| (RenderingPrebootDeps & {
status?: never;
elasticsearch?: never;
customBranding?: never;
userSettings?: never;
});

/** @internal */
export class RenderingService {
Expand Down Expand Up @@ -67,6 +73,7 @@ export class RenderingService {
status,
uiPlugins,
customBranding,
userSettings,
}: RenderingSetupDeps): Promise<InternalRenderingServiceSetup> {
registerBootstrapRoute({
router: http.createRouter<InternalRenderingRequestHandlerContext>(''),
Expand All @@ -79,7 +86,14 @@ export class RenderingService {
});

return {
render: this.render.bind(this, { elasticsearch, http, uiPlugins, status, customBranding }),
render: this.render.bind(this, {
elasticsearch,
http,
uiPlugins,
status,
customBranding,
userSettings,
}),
};
}

Expand All @@ -92,7 +106,7 @@ export class RenderingService {
},
{ isAnonymousPage = false, vars, includeExposedConfigKeys }: IRenderOptions = {}
) {
const { elasticsearch, http, uiPlugins, status, customBranding } = renderOptions;
const { elasticsearch, http, uiPlugins, status, customBranding, userSettings } = renderOptions;

const env = {
mode: this.coreContext.env.mode,
Expand All @@ -101,14 +115,29 @@ export class RenderingService {
const buildNum = env.packageInfo.buildNum;
const basePath = http.basePath.get(request);
const { serverBasePath, publicBaseUrl } = http.basePath;

let settingsUserValues: Record<string, UserProvidedValues> = {};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIt: Can we make this one array userValues = [{}, {}, {}]? then the whole reading from promise can be simplified to userValues = await Promise.all(...).

let globalSettingsUserValues: Record<string, UserProvidedValues> = {};

if (!isAnonymousPage) {
const userValues = await Promise.all([
uiSettings.client?.getUserProvided(),
uiSettings.globalClient?.getUserProvided(),
]);

settingsUserValues = userValues[0];
globalSettingsUserValues = userValues[1];
}

const settings = {
defaults: uiSettings.client?.getRegistered() ?? {},
user: isAnonymousPage ? {} : await uiSettings.client?.getUserProvided(),
user: settingsUserValues,
};
const globalSettings = {
defaults: uiSettings.globalClient?.getRegistered() ?? {},
user: isAnonymousPage ? {} : await uiSettings.globalClient?.getUserProvided(),
user: globalSettingsUserValues,
};

let clusterInfo = {};
let branding: CustomBranding = {};
try {
Expand All @@ -129,7 +158,16 @@ export class RenderingService {
// swallow error
}

const darkMode = getSettingValue('theme:darkMode', settings, Boolean);
const userSettingDarkMode: string = (await userSettings?.getUserSettingDarkMode(request)) || '';

let darkMode: boolean;

if (userSettingDarkMode) {
darkMode = userSettingDarkMode === 'dark';
} else {
darkMode = getSettingValue('theme:darkMode', settings, Boolean);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. I think we may want to only do that when the user is authenticated, as we do for settings retrieval? (if (!isAnonymousPage))

  2. I would expect userSettings.getUserSettingDarkMode to return a boolean? I don't think it should be the renderer's responsibility to convert the darkMode string to a boolean?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great catch - fixed in latest commit!


const themeVersion: ThemeVersion = 'v8';

const stylesheetPaths = getStylesheetPaths({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@ import { httpServiceMock } from '@kbn/core-http-server-mocks';
import { elasticsearchServiceMock } from '@kbn/core-elasticsearch-server-mocks';
import { statusServiceMock } from '@kbn/core-status-server-mocks';
import { customBrandingServiceMock } from '@kbn/core-custom-branding-server-mocks';
import { userSettingsServiceMock } from '@kbn/core-user-settings-server-mocks';

const context = mockCoreContext.create();
const httpPreboot = httpServiceMock.createInternalPrebootContract();
const httpSetup = httpServiceMock.createInternalSetupContract();
const status = statusServiceMock.createInternalSetupContract();
const elasticsearch = elasticsearchServiceMock.createInternalSetup();
const customBranding = customBrandingServiceMock.createSetupContract();
const userSettings = userSettingsServiceMock.createSetupContract();

function createUiPlugins() {
return {
Expand All @@ -38,4 +40,5 @@ export const mockRenderingSetupDeps = {
uiPlugins: createUiPlugins(),
customBranding,
status,
userSettings,
};
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import type { IUiSettingsClient } from '@kbn/core-ui-settings-server';
import type { UiPlugins } from '@kbn/core-plugins-base-server-internal';
import type { InternalCustomBrandingSetup } from '@kbn/core-custom-branding-server-internal';
import type { CustomBranding } from '@kbn/core-custom-branding-common';
import type { InternalUserSettingsServiceSetup } from '@kbn/core-user-settings-server-internal';

/** @internal */
export interface RenderingMetadata {
Expand Down Expand Up @@ -48,6 +49,7 @@ export interface RenderingSetupDeps {
status: InternalStatusServiceSetup;
uiPlugins: UiPlugins;
customBranding: InternalCustomBrandingSetup;
userSettings: InternalUserSettingsServiceSetup;
}

/** @internal */
Expand Down
Loading