Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
8569506
datasource errors become user messages
drewdaemon Dec 16, 2022
f160f97
unified search errors become user messages
drewdaemon Dec 16, 2022
6f634b9
datasource warnings become user messages
drewdaemon Dec 16, 2022
7c03428
datasource deprecation warnings become user messages
drewdaemon Dec 16, 2022
5bf0124
visualization error messages are user messages
drewdaemon Dec 19, 2022
bf9021e
visualization warnings become user messages
drewdaemon Dec 19, 2022
3933fe8
clean up some remaining usages
drewdaemon Dec 19, 2022
7e51cd8
listen for messages from the active visualization
drewdaemon Dec 19, 2022
843c6d5
unknown visualization error becomes user message
drewdaemon Dec 20, 2022
71adbe8
missing index pattern error becomes user message
drewdaemon Dec 21, 2022
0de8d2c
update tests
drewdaemon Dec 21, 2022
b406b44
clean up workspace panel error logic
drewdaemon Dec 21, 2022
e0ba1ce
search warnings become user messages
drewdaemon Dec 21, 2022
8f3afc6
expression parse errors become user messages
drewdaemon Dec 21, 2022
6a5e7bf
gauge: dimension errors become user messages
drewdaemon Dec 22, 2022
fdd320d
xy: group invalid message becomes user message
drewdaemon Dec 22, 2022
147ad01
remove invalid and invalid message props from the group config
drewdaemon Dec 22, 2022
1fabfd5
Merge branch 'main' of github.com:elastic/kibana into 143673/dont-blo…
drewdaemon Jan 10, 2023
6d638b0
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Jan 10, 2023
e542595
user messages come to the embeddable
drewdaemon Jan 11, 2023
ef8661c
embeddable search warnings become user messages
drewdaemon Jan 12, 2023
c49a210
Merge branch '143673/dont-block-render-on-missing-field' of github.co…
drewdaemon Jan 12, 2023
64eee6a
progress toward user messages in embeddable
drewdaemon Jan 12, 2023
89ffe66
unify user message query interface
drewdaemon Jan 12, 2023
bec1570
remove all error message generation from docToExpression
drewdaemon Jan 13, 2023
23077ed
utilize existing index patterns cache
drewdaemon Jan 13, 2023
8701293
fix infinite loop scenario
drewdaemon Jan 13, 2023
862c44c
re-enable filtering out invalid suggestion configurations
drewdaemon Jan 13, 2023
39cfd6e
fix some types
drewdaemon Jan 13, 2023
dd20547
fix types and i18n
drewdaemon Jan 13, 2023
b33f4e4
update functional test workspace error detection logic
drewdaemon Jan 13, 2023
5a1b551
correct suggestion panel filtering logic
drewdaemon Jan 13, 2023
ea0b1b6
fix data test selector
drewdaemon Jan 13, 2023
93b31c6
fix shard failure warning duplication
drewdaemon Jan 13, 2023
ab8acfb
make suggestion panel display location synonomous with visualization
drewdaemon Jan 14, 2023
a9d2695
minor logic simplification
drewdaemon Jan 14, 2023
6231665
Merge branch 'main' into 143673/dont-block-render-on-missing-field
kibanamachine Jan 16, 2023
f9677f2
datasource dimension errors become user messages
drewdaemon Jan 18, 2023
8a10b3e
Merge branch 'main' into 143673/dont-block-render-on-missing-field
kibanamachine Jan 18, 2023
9ce85da
fix some typings
drewdaemon Jan 18, 2023
37b2a92
use core start type from core/public
drewdaemon Jan 18, 2023
6958bc3
Merge branch '143673/dont-block-render-on-missing-field' of github.co…
drewdaemon Jan 18, 2023
8f5df3c
small code clean-up
drewdaemon Jan 18, 2023
73684ff
make form-based user messages method more concise
drewdaemon Jan 18, 2023
28b0b41
resolve conflicts
drewdaemon Jan 18, 2023
80de181
review feedback
drewdaemon Jan 19, 2023
b53c208
fix conditional
drewdaemon Jan 19, 2023
360ded4
remove layerId
drewdaemon Jan 19, 2023
3261793
Merge branch 'main' into 143673/dont-block-render-on-missing-field
stratoula Jan 23, 2023
989c868
style update
drewdaemon Jan 23, 2023
4648fe1
Merge branch '143673/dont-block-render-on-missing-field' of github.co…
drewdaemon Jan 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
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,4 @@ export const getRotatingNumberVisualization = ({
domElement
);
},

getErrorMessages(state) {
// Is it possible to break it?
return undefined;
},
});

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

4 changes: 4 additions & 0 deletions x-pack/plugins/lens/public/app_plugin/app.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import moment from 'moment';

import { setState, LensAppState } from '../state_management';
import { coreMock } from '@kbn/core/public/mocks';
jest.mock('../editor_frame_service/editor_frame/expression_helpers');
jest.mock('@kbn/core/public');
jest.mock('../persistence/saved_objects_utils/check_for_duplicate_title', () => ({
Expand Down Expand Up @@ -85,6 +86,7 @@ describe('Lens App', () => {
visualizationMap,
topNavMenuEntryGenerators: [],
theme$: new Observable(),
coreStart: coreMock.createStart(),
};
}

Expand Down Expand Up @@ -144,6 +146,8 @@ describe('Lens App', () => {
expect(frame.EditorFrameContainer).toHaveBeenLastCalledWith(
{
indexPatternService: expect.any(Object),
getUserMessages: expect.any(Function),
addUserMessages: expect.any(Function),
lensInspector: {
adapters: {
expression: expect.any(Object),
Expand Down
110 changes: 109 additions & 1 deletion x-pack/plugins/lens/public/app_plugin/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import type { LensAppLocatorParams } from '../../common/locator/locator';
import { LensAppProps, LensAppServices } from './types';
import { LensTopNavMenu } from './lens_top_nav';
import { LensByReferenceInput } from '../embeddable';
import { EditorFrameInstance } from '../types';
import { AddUserMessages, EditorFrameInstance, UserMessage, UserMessagesGetter } from '../types';
import { Document } from '../persistence/saved_object_store';

import {
Expand All @@ -28,6 +28,9 @@ import {
DispatchSetState,
selectSavedObjectFormat,
updateIndexPatterns,
updateDatasourceState,
selectActiveDatasourceId,
selectFrameDatasourceAPI,
} from '../state_management';
import { SaveModalContainer, runSaveLensVisualization } from './save_modal_container';
import { LensInspector } from '../lens_inspector_service';
Expand All @@ -38,6 +41,7 @@ import {
createIndexPatternService,
} from '../data_views_service/service';
import { replaceIndexpattern } from '../state_management/lens_slice';
import { filterUserMessages, getApplicationUserMessages } from './get_application_user_messages';

export type SaveProps = Omit<OnSaveProps, 'onTitleDuplicate' | 'newDescription'> & {
returnToOrigin: boolean;
Expand All @@ -62,6 +66,7 @@ export function App({
topNavMenuEntryGenerators,
initialContext,
theme$,
coreStart,
}: LensAppProps) {
const lensAppServices = useKibana<LensAppServices>().services;

Expand Down Expand Up @@ -98,8 +103,10 @@ export function App({
sharingSavedObjectProps,
isLinkedToOriginatingApp,
searchSessionId,
datasourceStates,
isLoading,
isSaveable,
visualization,
} = useLensSelector((state) => state.lens);

const selectorDependencies = useMemo(
Expand Down Expand Up @@ -473,6 +480,98 @@ export function App({
})
: undefined;

const activeDatasourceId = useLensSelector(selectActiveDatasourceId);

const frameDatasourceAPI = useLensSelector((state) =>
selectFrameDatasourceAPI(state, datasourceMap)
);

const [userMessages, setUserMessages] = useState<UserMessage[]>([]);

useEffect(() => {
setUserMessages([
...(activeDatasourceId
? datasourceMap[activeDatasourceId].getUserMessages(
datasourceStates[activeDatasourceId].state,
{
frame: frameDatasourceAPI,
setState: (newStateOrUpdater) =>
dispatch(
updateDatasourceState({
updater: newStateOrUpdater,
datasourceId: activeDatasourceId,
})
),
}
)
: []),
...(visualization.activeId && visualization.state
? visualizationMap[visualization.activeId]?.getUserMessages?.(visualization.state, {
frame: frameDatasourceAPI,
}) ?? []
: []),
...getApplicationUserMessages({
visualizationType: persistedDoc?.visualizationType,
visualizationMap,
visualization,
activeDatasource: activeDatasourceId ? datasourceMap[activeDatasourceId] : null,
activeDatasourceState: activeDatasourceId ? datasourceStates[activeDatasourceId] : null,
core: coreStart,
dataViews: frameDatasourceAPI.dataViews,
}),
]);
}, [
activeDatasourceId,
coreStart,
datasourceMap,
datasourceStates,
dispatch,
frameDatasourceAPI,
persistedDoc?.visualizationType,
visualization,
visualizationMap,
]);

// these are messages managed from other parts of Lens
const [additionalUserMessages, setAdditionalUserMessages] = useState<Record<string, UserMessage>>(
{}
);

const getUserMessages: UserMessagesGetter = (locationId, filterArgs) =>
filterUserMessages(
[...userMessages, ...Object.values(additionalUserMessages)],
locationId,
filterArgs
);

const addUserMessages: AddUserMessages = (messages) => {
const newMessageMap = {
...additionalUserMessages,
};

const addedMessageIds: string[] = [];
messages.forEach((message) => {
if (!newMessageMap[message.uniqueId]) {
addedMessageIds.push(message.uniqueId);
newMessageMap[message.uniqueId] = message;
}
});

if (addedMessageIds.length) {
setAdditionalUserMessages(newMessageMap);
}

return () => {
const withMessagesRemoved = {
...additionalUserMessages,
};

addedMessageIds.forEach((id) => delete withMessagesRemoved[id]);

setAdditionalUserMessages(withMessagesRemoved);
};
};

return (
<>
<div className="lnsApp" data-test-subj="lnsApp" role="main">
Expand Down Expand Up @@ -506,6 +605,7 @@ export function App({
theme$={theme$}
indexPatternService={indexPatternService}
onTextBasedSavedAndExit={onTextBasedSavedAndExit}
getUserMessages={getUserMessages}
shortUrlService={shortUrlService}
/>
{getLegacyUrlConflictCallout()}
Expand All @@ -515,6 +615,8 @@ export function App({
showNoDataPopover={showNoDataPopover}
lensInspector={lensInspector}
indexPatternService={indexPatternService}
getUserMessages={getUserMessages}
addUserMessages={addUserMessages}
/>
)}
</div>
Expand Down Expand Up @@ -582,18 +684,24 @@ export function App({
const MemoizedEditorFrameWrapper = React.memo(function EditorFrameWrapper({
editorFrame,
showNoDataPopover,
getUserMessages,
addUserMessages,
lensInspector,
indexPatternService,
}: {
editorFrame: EditorFrameInstance;
lensInspector: LensInspector;
showNoDataPopover: () => void;
getUserMessages: UserMessagesGetter;
addUserMessages: AddUserMessages;
indexPatternService: IndexPatternServiceAPI;
}) {
const { EditorFrameContainer } = editorFrame;
return (
<EditorFrameContainer
showNoDataPopover={showNoDataPopover}
getUserMessages={getUserMessages}
addUserMessages={addUserMessages}
lensInspector={lensInspector}
indexPatternService={indexPatternService}
/>
Expand Down
Loading