[Workplace Search] Refactor RoleMappingsLogic (#99284)
* Reorder methods * Reorder actions interface * Reorder values interface * Reorder server details interface * Add path * Refactor handleDeleteMapping logic * REorder and refactor actions Also changes functions with no return values to properties to match app search // Before: foo: () => true // After foo: true * Reorder reducers * Reorder JSON body props * Change JSON order in test Passes locally but fails on CI Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
ae6109e15a
commit
e0d4acb1b1
|
@ -293,13 +293,13 @@ describe('RoleMappingsLogic', () => {
|
|||
|
||||
expect(http.post).toHaveBeenCalledWith('/api/workplace_search/org/role_mappings', {
|
||||
body: JSON.stringify({
|
||||
roleType: 'admin',
|
||||
allGroups: false,
|
||||
authProvider: [ANY_AUTH_PROVIDER],
|
||||
rules: {
|
||||
username: '',
|
||||
},
|
||||
roleType: 'admin',
|
||||
groups: [],
|
||||
allGroups: false,
|
||||
authProvider: [ANY_AUTH_PROVIDER],
|
||||
}),
|
||||
});
|
||||
await nextTick();
|
||||
|
@ -317,13 +317,13 @@ describe('RoleMappingsLogic', () => {
|
|||
`/api/workplace_search/org/role_mappings/${wsRoleMapping.id}`,
|
||||
{
|
||||
body: JSON.stringify({
|
||||
roleType: 'admin',
|
||||
allGroups: true,
|
||||
authProvider: [ANY_AUTH_PROVIDER, 'other_auth'],
|
||||
rules: {
|
||||
username: 'user',
|
||||
},
|
||||
roleType: 'admin',
|
||||
groups: [],
|
||||
allGroups: true,
|
||||
authProvider: [ANY_AUTH_PROVIDER, 'other_auth'],
|
||||
}),
|
||||
}
|
||||
);
|
||||
|
|
|
@ -28,8 +28,8 @@ import {
|
|||
} from './constants';
|
||||
|
||||
interface RoleMappingsServerDetails {
|
||||
multipleAuthProvidersConfig: boolean;
|
||||
roleMappings: WSRoleMapping[];
|
||||
multipleAuthProvidersConfig: boolean;
|
||||
}
|
||||
|
||||
interface RoleMappingServerDetails {
|
||||
|
@ -41,68 +41,69 @@ interface RoleMappingServerDetails {
|
|||
roleMapping?: WSRoleMapping;
|
||||
}
|
||||
|
||||
interface RoleMappingsActions {
|
||||
setRoleMappingsData(data: RoleMappingsServerDetails): RoleMappingsServerDetails;
|
||||
setRoleMappingData(data: RoleMappingServerDetails): RoleMappingServerDetails;
|
||||
handleRoleChange(roleType: Role): { roleType: Role };
|
||||
handleAllGroupsSelectionChange(selected: boolean): { selected: boolean };
|
||||
handleAttributeSelectorChange(
|
||||
value: AttributeName,
|
||||
firstElasticsearchRole: string
|
||||
): { value: AttributeName; firstElasticsearchRole: string };
|
||||
handleAttributeValueChange(value: string): { value: string };
|
||||
handleGroupSelectionChange(
|
||||
groupId: string,
|
||||
selected: boolean
|
||||
): { groupId: string; selected: boolean };
|
||||
handleAuthProviderChange(value: string[]): { value: string[] };
|
||||
resetState(): void;
|
||||
initializeRoleMapping(roleId?: string): { roleId?: string };
|
||||
handleSaveMapping(): void;
|
||||
handleDeleteMapping(): void;
|
||||
initializeRoleMappings(): void;
|
||||
}
|
||||
|
||||
interface RoleMappingsValues {
|
||||
attributes: string[];
|
||||
availableAuthProviders: string[];
|
||||
elasticsearchRoles: string[];
|
||||
roleMapping: WSRoleMapping | null;
|
||||
roleMappings: WSRoleMapping[];
|
||||
roleType: Role;
|
||||
attributeValue: string;
|
||||
attributeName: AttributeName;
|
||||
dataLoading: boolean;
|
||||
multipleAuthProvidersConfig: boolean;
|
||||
availableGroups: RoleGroup[];
|
||||
selectedGroups: Set<string>;
|
||||
includeInAllGroups: boolean;
|
||||
selectedAuthProviders: string[];
|
||||
}
|
||||
|
||||
const getFirstAttributeName = (roleMapping: WSRoleMapping): AttributeName =>
|
||||
Object.entries(roleMapping.rules)[0][0] as AttributeName;
|
||||
const getFirstAttributeValue = (roleMapping: WSRoleMapping): string =>
|
||||
Object.entries(roleMapping.rules)[0][1] as string;
|
||||
|
||||
interface RoleMappingsActions {
|
||||
handleAllGroupsSelectionChange(selected: boolean): { selected: boolean };
|
||||
handleAuthProviderChange(value: string[]): { value: string[] };
|
||||
handleAttributeSelectorChange(
|
||||
value: AttributeName,
|
||||
firstElasticsearchRole: string
|
||||
): { value: AttributeName; firstElasticsearchRole: string };
|
||||
handleAttributeValueChange(value: string): { value: string };
|
||||
handleDeleteMapping(): void;
|
||||
handleGroupSelectionChange(
|
||||
groupId: string,
|
||||
selected: boolean
|
||||
): { groupId: string; selected: boolean };
|
||||
handleRoleChange(roleType: Role): { roleType: Role };
|
||||
handleSaveMapping(): void;
|
||||
initializeRoleMapping(roleId?: string): { roleId?: string };
|
||||
initializeRoleMappings(): void;
|
||||
resetState(): void;
|
||||
setRoleMappingData(data: RoleMappingServerDetails): RoleMappingServerDetails;
|
||||
setRoleMappingsData(data: RoleMappingsServerDetails): RoleMappingsServerDetails;
|
||||
}
|
||||
|
||||
interface RoleMappingsValues {
|
||||
includeInAllGroups: boolean;
|
||||
attributeName: AttributeName;
|
||||
attributeValue: string;
|
||||
attributes: string[];
|
||||
availableAuthProviders: string[];
|
||||
availableGroups: RoleGroup[];
|
||||
dataLoading: boolean;
|
||||
elasticsearchRoles: string[];
|
||||
multipleAuthProvidersConfig: boolean;
|
||||
roleMapping: WSRoleMapping | null;
|
||||
roleMappings: WSRoleMapping[];
|
||||
roleType: Role;
|
||||
selectedAuthProviders: string[];
|
||||
selectedGroups: Set<string>;
|
||||
}
|
||||
|
||||
export const RoleMappingsLogic = kea<MakeLogicType<RoleMappingsValues, RoleMappingsActions>>({
|
||||
path: ['enterprise_search', 'workplace_search', 'role_mappings'],
|
||||
actions: {
|
||||
setRoleMappingsData: (data: RoleMappingsServerDetails) => data,
|
||||
setRoleMappingData: (data: RoleMappingServerDetails) => data,
|
||||
handleAuthProviderChange: (value: string[]) => ({ value }),
|
||||
handleRoleChange: (roleType: Role) => ({ roleType }),
|
||||
handleGroupSelectionChange: (groupId: string, selected: boolean) => ({ groupId, selected }),
|
||||
handleAllGroupsSelectionChange: (selected: boolean) => ({ selected }),
|
||||
handleAttributeSelectorChange: (value: string, firstElasticsearchRole: string) => ({
|
||||
value,
|
||||
firstElasticsearchRole,
|
||||
}),
|
||||
handleAttributeValueChange: (value: string) => ({ value }),
|
||||
handleAuthProviderChange: (value: string[]) => ({ value }),
|
||||
resetState: () => true,
|
||||
handleAllGroupsSelectionChange: (selected: boolean) => ({ selected }),
|
||||
resetState: true,
|
||||
initializeRoleMappings: true,
|
||||
initializeRoleMapping: (roleId?: string) => ({ roleId }),
|
||||
handleSaveMapping: () => true,
|
||||
handleDeleteMapping: () => true,
|
||||
initializeRoleMappings: () => true,
|
||||
handleDeleteMapping: true,
|
||||
handleSaveMapping: true,
|
||||
},
|
||||
reducers: {
|
||||
dataLoading: [
|
||||
|
@ -120,10 +121,12 @@ export const RoleMappingsLogic = kea<MakeLogicType<RoleMappingsValues, RoleMappi
|
|||
resetState: () => [],
|
||||
},
|
||||
],
|
||||
attributes: [
|
||||
[],
|
||||
multipleAuthProvidersConfig: [
|
||||
false,
|
||||
{
|
||||
setRoleMappingData: (_, { attributes }) => attributes,
|
||||
setRoleMappingsData: (_, { multipleAuthProvidersConfig }) => multipleAuthProvidersConfig,
|
||||
setRoleMappingData: (_, { multipleAuthProvidersConfig }) => multipleAuthProvidersConfig,
|
||||
resetState: () => false,
|
||||
},
|
||||
],
|
||||
availableGroups: [
|
||||
|
@ -132,6 +135,60 @@ export const RoleMappingsLogic = kea<MakeLogicType<RoleMappingsValues, RoleMappi
|
|||
setRoleMappingData: (_, { availableGroups }) => availableGroups,
|
||||
},
|
||||
],
|
||||
attributes: [
|
||||
[],
|
||||
{
|
||||
setRoleMappingData: (_, { attributes }) => attributes,
|
||||
},
|
||||
],
|
||||
elasticsearchRoles: [
|
||||
[],
|
||||
{
|
||||
setRoleMappingData: (_, { elasticsearchRoles }) => elasticsearchRoles,
|
||||
},
|
||||
],
|
||||
roleMapping: [
|
||||
null,
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) => roleMapping || null,
|
||||
resetState: () => null,
|
||||
},
|
||||
],
|
||||
roleType: [
|
||||
'admin',
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) =>
|
||||
roleMapping ? (roleMapping.roleType as Role) : 'admin',
|
||||
handleRoleChange: (_, { roleType }) => roleType,
|
||||
},
|
||||
],
|
||||
includeInAllGroups: [
|
||||
false,
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) => (roleMapping ? roleMapping.allGroups : false),
|
||||
handleAllGroupsSelectionChange: (_, { selected }) => selected,
|
||||
},
|
||||
],
|
||||
attributeValue: [
|
||||
'',
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) =>
|
||||
roleMapping ? getFirstAttributeValue(roleMapping) : '',
|
||||
handleAttributeSelectorChange: (_, { value, firstElasticsearchRole }) =>
|
||||
value === 'role' ? firstElasticsearchRole : '',
|
||||
handleAttributeValueChange: (_, { value }) => value,
|
||||
resetState: () => '',
|
||||
},
|
||||
],
|
||||
attributeName: [
|
||||
'username',
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) =>
|
||||
roleMapping ? getFirstAttributeName(roleMapping) : 'username',
|
||||
handleAttributeSelectorChange: (_, { value }) => value,
|
||||
resetState: () => 'username',
|
||||
},
|
||||
],
|
||||
selectedGroups: [
|
||||
new Set(),
|
||||
{
|
||||
|
@ -154,68 +211,12 @@ export const RoleMappingsLogic = kea<MakeLogicType<RoleMappingsValues, RoleMappi
|
|||
},
|
||||
},
|
||||
],
|
||||
includeInAllGroups: [
|
||||
false,
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) => (roleMapping ? roleMapping.allGroups : false),
|
||||
handleAllGroupsSelectionChange: (_, { selected }) => selected,
|
||||
},
|
||||
],
|
||||
elasticsearchRoles: [
|
||||
[],
|
||||
{
|
||||
setRoleMappingData: (_, { elasticsearchRoles }) => elasticsearchRoles,
|
||||
},
|
||||
],
|
||||
roleMapping: [
|
||||
null,
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) => roleMapping || null,
|
||||
resetState: () => null,
|
||||
},
|
||||
],
|
||||
roleType: [
|
||||
'admin',
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) =>
|
||||
roleMapping ? (roleMapping.roleType as Role) : 'admin',
|
||||
handleRoleChange: (_, { roleType }) => roleType,
|
||||
},
|
||||
],
|
||||
attributeValue: [
|
||||
'',
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) =>
|
||||
roleMapping ? getFirstAttributeValue(roleMapping) : '',
|
||||
handleAttributeSelectorChange: (_, { value, firstElasticsearchRole }) =>
|
||||
value === 'role' ? firstElasticsearchRole : '',
|
||||
handleAttributeValueChange: (_, { value }) => value,
|
||||
resetState: () => '',
|
||||
},
|
||||
],
|
||||
attributeName: [
|
||||
'username',
|
||||
{
|
||||
setRoleMappingData: (_, { roleMapping }) =>
|
||||
roleMapping ? getFirstAttributeName(roleMapping) : 'username',
|
||||
handleAttributeSelectorChange: (_, { value }) => value,
|
||||
resetState: () => 'username',
|
||||
},
|
||||
],
|
||||
availableAuthProviders: [
|
||||
[],
|
||||
{
|
||||
setRoleMappingData: (_, { authProviders }) => authProviders,
|
||||
},
|
||||
],
|
||||
multipleAuthProvidersConfig: [
|
||||
false,
|
||||
{
|
||||
setRoleMappingsData: (_, { multipleAuthProvidersConfig }) => multipleAuthProvidersConfig,
|
||||
setRoleMappingData: (_, { multipleAuthProvidersConfig }) => multipleAuthProvidersConfig,
|
||||
resetState: () => false,
|
||||
},
|
||||
],
|
||||
selectedAuthProviders: [
|
||||
[ANY_AUTH_PROVIDER],
|
||||
{
|
||||
|
@ -264,13 +265,13 @@ export const RoleMappingsLogic = kea<MakeLogicType<RoleMappingsValues, RoleMappi
|
|||
}
|
||||
},
|
||||
handleDeleteMapping: async () => {
|
||||
const { roleMapping } = values;
|
||||
if (!roleMapping) return;
|
||||
|
||||
const { http } = HttpLogic.values;
|
||||
const { navigateToUrl } = KibanaLogic.values;
|
||||
const { roleMapping } = values;
|
||||
if (!roleMapping) {
|
||||
return;
|
||||
}
|
||||
const route = `/api/workplace_search/org/role_mappings/${roleMapping.id}`;
|
||||
|
||||
if (window.confirm(DELETE_ROLE_MAPPING_MESSAGE)) {
|
||||
try {
|
||||
await http.delete(route);
|
||||
|
@ -295,13 +296,13 @@ export const RoleMappingsLogic = kea<MakeLogicType<RoleMappingsValues, RoleMappi
|
|||
} = values;
|
||||
|
||||
const body = JSON.stringify({
|
||||
roleType,
|
||||
allGroups: includeInAllGroups,
|
||||
authProvider: selectedAuthProviders,
|
||||
rules: {
|
||||
[attributeName]: attributeValue,
|
||||
},
|
||||
roleType,
|
||||
groups: includeInAllGroups ? [] : Array.from(selectedGroups),
|
||||
allGroups: includeInAllGroups,
|
||||
authProvider: selectedAuthProviders,
|
||||
});
|
||||
|
||||
const request = !roleMapping
|
||||
|
|
Loading…
Reference in a new issue