Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Dosant committed Aug 18, 2020
1 parent e1673ba commit c01f7d7
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 16 deletions.
4 changes: 2 additions & 2 deletions src/plugins/kibana_utils/public/ui/configurable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ export interface Configurable<Config extends object = object, Context = object>
/**
* Create default config for this item, used when item is created for the first time.
*/
readonly createConfig: () => Config;
readonly createConfig: (context: Context) => Config;

/**
* Is this config valid. Used to validate user's input before saving.
*/
readonly isConfigValid: (config: Config) => boolean;
readonly isConfigValid: (config: Config, context: Context) => boolean;

/**
* `UiComponent` to be rendered when collecting configuration for this item.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { UiActionsEnhancedDrilldownDefinition as Drilldown } from '../../../../p
import { RangeSelectContext } from '../../../../../src/plugins/embeddable/public';
import { CollectConfigProps } from '../../../../../src/plugins/kibana_utils/public';
import { SELECT_RANGE_TRIGGER } from '../../../../../src/plugins/ui_actions/public';
import { BaseActionFactoryContext } from '../../../../plugins/ui_actions_enhanced/public/dynamic_actions';

export interface Config {
name: string;
Expand Down Expand Up @@ -52,10 +53,19 @@ export class DashboardHelloWorldOnlyRangeSelectDrilldown
name: '',
});

public readonly isConfigValid = (config: Config): config is Config => {
public readonly isConfigValid = (
config: Config,
context: BaseActionFactoryContext<typeof SELECT_RANGE_TRIGGER>
): config is Config => {
// eslint-disable-next-line no-console
console.log('Showcasing, that can access action factory context:', context);

return !!config.name;
};

/**
* Showcase isCompatible. Disabled drilldown action in case if range.length === 0
*/
isCompatible(config: Config, context: RangeSelectContext): Promise<boolean> {
if (context.data.range.length === 0) return Promise.resolve(false);
return Promise.resolve(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,9 @@ export function Demo({ actionFactories }: { actionFactories: Array<ActionFactory

setState({
currentActionFactory: newActionFactory,
config: newActionFactory.createConfig(),
config: newActionFactory.createConfig({
triggers: state.selectedTriggers ?? [],
}),
});
}

Expand Down Expand Up @@ -255,7 +257,11 @@ export function Demo({ actionFactories }: { actionFactories: Array<ActionFactory
<div>Action Factory Config: {JSON.stringify(state.config)}</div>
<div>
Is config valid:{' '}
{JSON.stringify(state.currentActionFactory?.isConfigValid(state.config!) ?? false)}
{JSON.stringify(
state.currentActionFactory?.isConfigValid(state.config!, {
triggers: state.selectedTriggers ?? [],
}) ?? false
)}
</div>
<div>Picked trigger: {state.selectedTriggers?.[0]}</div>
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ export interface FlyoutDrilldownWizardProps<
}

function useWizardConfigState(
actionFactoryContext: BaseActionFactoryContext,
initialDrilldownWizardConfig?: DrilldownWizardConfig
): [
DrilldownWizardConfig,
Expand Down Expand Up @@ -102,7 +103,10 @@ function useWizardConfigState(
setWizardConfig({
...wizardConfig,
actionFactory,
actionConfig: actionConfigCache[actionFactory.id] ?? actionFactory.createConfig(),
actionConfig:
actionConfigCache[actionFactory.id] ??
actionFactory.createConfig(actionFactoryContext),
selectedTriggers: [],
});
} else {
if (wizardConfig.actionFactory?.id) {
Expand Down Expand Up @@ -147,7 +151,18 @@ export function FlyoutDrilldownWizard<CurrentActionConfig extends object = objec
const [
wizardConfig,
{ setActionFactory, setActionConfig, setName, setSelectedTriggers },
] = useWizardConfigState(initialDrilldownWizardConfig);
] = useWizardConfigState(
{ ...extraActionFactoryContext, triggers: supportedTriggers },
initialDrilldownWizardConfig
);

const actionFactoryContext: BaseActionFactoryContext = useMemo(
() => ({
...extraActionFactoryContext,
triggers: wizardConfig.selectedTriggers ?? [],
}),
[extraActionFactoryContext, wizardConfig.selectedTriggers]
);

const isActionValid = (
config: DrilldownWizardConfig
Expand All @@ -157,17 +172,12 @@ export function FlyoutDrilldownWizard<CurrentActionConfig extends object = objec
if (!wizardConfig.actionConfig) return false;
if (!wizardConfig.selectedTriggers || wizardConfig.selectedTriggers.length === 0) return false;

return wizardConfig.actionFactory.isConfigValid(wizardConfig.actionConfig);
return wizardConfig.actionFactory.isConfigValid(
wizardConfig.actionConfig,
actionFactoryContext
);
};

const actionFactoryContext: BaseActionFactoryContext = useMemo(
() => ({
...extraActionFactoryContext,
triggers: wizardConfig.selectedTriggers ?? [],
}),
[extraActionFactoryContext, wizardConfig.selectedTriggers]
);

const footer = (
<EuiButton
onClick={() => {
Expand Down

0 comments on commit c01f7d7

Please sign in to comment.