Skip to content

Commit 39b102e

Browse files
Pollepsjoepio
authored andcommitted
#648 Add ontology test
1 parent 7b814cb commit 39b102e

File tree

12 files changed

+309
-30
lines changed

12 files changed

+309
-30
lines changed

browser/data-browser/src/components/ResourceContextMenu/index.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useCallback } from 'react';
22
import { useLocation, useNavigate } from 'react-router-dom';
3-
import { Client, properties, useResource, useStore } from '@tomic/react';
3+
import { Client, core, useResource, useStore } from '@tomic/react';
44
import {
55
editURL,
66
dataURL,
@@ -57,6 +57,7 @@ export interface ResourceContextMenuProps {
5757
bindActive?: (active: boolean) => void;
5858
/** Callback that is called after the resource was deleted */
5959
onAfterDelete?: () => void;
60+
title?: string;
6061
}
6162

6263
/** Dropdown menu that opens a bunch of actions for some resource */
@@ -66,6 +67,7 @@ function ResourceContextMenu({
6667
trigger,
6768
simple,
6869
isMainMenu,
70+
title,
6971
bindActive,
7072
onAfterDelete,
7173
}: ResourceContextMenuProps) {
@@ -80,7 +82,7 @@ function ResourceContextMenu({
8082
// Try to not have a useResource hook in here, as that will lead to many costly fetches when the user enters a new subject
8183

8284
const handleDestroy = useCallback(async () => {
83-
const parent = resource.get<string>(properties.parent);
85+
const parent = resource.get(core.properties.parent);
8486

8587
try {
8688
await resource.destroy(store);
@@ -187,7 +189,12 @@ function ResourceContextMenu({
187189
)
188190
: items;
189191

190-
const triggerComp = trigger ?? buildDefaultTrigger(<FaEllipsisV />);
192+
const triggerComp =
193+
trigger ??
194+
buildDefaultTrigger(
195+
<FaEllipsisV />,
196+
title ?? `Open ${resource.title} menu`,
197+
);
191198

192199
return (
193200
<>

browser/data-browser/src/components/forms/NewForm/NewFormDialog.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { useNewForm } from './useNewForm';
1414
import { getNamePartFromProps } from '../../../helpers/getNamePartFromProps';
1515

1616
export interface NewFormDialogProps extends NewFormProps {
17-
closeDialog: () => void;
17+
closeDialog: (success?: boolean) => void;
1818
initialProps?: Record<string, JSONValue>;
1919
onSave: (subject: string) => void;
2020
parent: string;
@@ -43,7 +43,7 @@ export const NewFormDialog = ({
4343

4444
const onResourceSave = useCallback(() => {
4545
onSave(resource.getSubject());
46-
closeDialog();
46+
closeDialog(true);
4747
}, [onSave, closeDialog, resource]);
4848

4949
// Onmount we generate a new subject based on the classtype and the user input.
@@ -95,7 +95,7 @@ export const NewFormDialog = ({
9595
</DialogContent>
9696
<DialogActions>
9797
{error && <InlineErrMessage>{error.message}</InlineErrMessage>}
98-
<Button subtle onClick={closeDialog}>
98+
<Button subtle onClick={() => closeDialog(false)}>
9999
Cancel
100100
</Button>
101101
<Button onClick={save} disabled={saving}>

browser/data-browser/src/components/forms/ResourceField.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import * as React from 'react';
21
import { useProperty, Resource, Property } from '@tomic/react';
32
import { styled } from 'styled-components';
43
import Field from './Field';
54
import Markdown from '../datatypes/Markdown';
65
import { InputWrapper, InputStyled } from './InputStyles';
76
import InputSwitcher from './InputSwitcher';
87
import { AtomicLink } from '../AtomicLink';
9-
import { useState } from 'react';
8+
import React, { useId, useState } from 'react';
109
import { Button } from '../Button';
1110

1211
function generateErrorPropName(prop: Property): string {
@@ -27,14 +26,19 @@ function ResourceField({
2726
disabled,
2827
label: labelProp,
2928
}: IFieldProps): JSX.Element {
29+
const id = useId();
3030
const property = useProperty(propertyURL);
3131
const [collapsedDynamic, setCollapsedDynamic] = useState(true);
3232

3333
if (property === null) {
3434
return (
35-
<Field label={labelProp || 'loading...'}>
35+
<Field label={labelProp || 'loading...'} fieldId={id}>
3636
<InputWrapper>
37-
<InputStyled disabled={disabled} placeholder='loading property...' />
37+
<InputStyled
38+
disabled={disabled}
39+
placeholder='loading property...'
40+
id={id}
41+
/>
3842
</InputWrapper>
3943
</Field>
4044
);
@@ -71,8 +75,10 @@ function ResourceField({
7175
handleDelete={handleDelete}
7276
required={required}
7377
disabled={disabled}
78+
fieldId={id}
7479
>
7580
<InputSwitcher
81+
id={id}
7682
key={propertyURL + ' input-switcher'}
7783
data-test={`input-${property.shortname}`}
7884
resource={resource}
@@ -106,6 +112,7 @@ function HelperText({ text, link }: HelperTextProps) {
106112

107113
/** A single field in a Resource form should receive these */
108114
export type InputProps = {
115+
id?: string;
109116
/** The resource that is being edited */
110117
resource: Resource;
111118
/** The property of the resource that is being edited */

browser/data-browser/src/components/forms/SearchBox/SearchBox.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import React, {
66
useState,
77
} from 'react';
88
import styled from 'styled-components';
9-
import { useResource } from '@tomic/react';
9+
import { removeCachedSearchResults, useResource, useStore } from '@tomic/react';
1010
import { DropdownPortalContext } from '../../Dropdown/dropdownContext';
1111
import * as RadixPopover from '@radix-ui/react-popover';
1212
import { SearchBoxWindow } from './SearchBoxWindow';
@@ -42,6 +42,7 @@ export function SearchBox({
4242
onCreateItem,
4343
onClose,
4444
}: React.PropsWithChildren<SearchBoxProps>): JSX.Element {
45+
const store = useStore();
4546
const selectedResource = useResource(value);
4647
const triggerRef = useRef<HTMLButtonElement>(null);
4748
const [inputValue, setInputValue] = useState('');
@@ -83,8 +84,9 @@ export function SearchBox({
8384
}
8485

8586
handleExit(false);
87+
removeCachedSearchResults(store);
8688
},
87-
[inputValue, onChange, handleExit],
89+
[inputValue, onChange, handleExit, store],
8890
);
8991

9092
const handleTriggerFocus = () => {

browser/data-browser/src/views/OntologyPage/Class/ClassCardWrite.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export function ClassCardWrite({ subject }: ClassCardWriteProps): JSX.Element {
4848
};
4949

5050
return (
51-
<StyledCard>
51+
<StyledCard data-testid={`class-card-write-${resource.title}`}>
5252
<Column id={toAnchorId(subject)}>
5353
<Row center justify='space-between'>
5454
<TitleWrapper>

browser/data-browser/src/views/OntologyPage/CreateInstanceButton.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ export function CreateInstanceButton({ ontology }: CreateInstanceButtonProps) {
1515
const store = useStore();
1616
const [active, setActive] = useState(false);
1717
const [classSubject, setClassSubject] = useState<string | undefined>();
18-
const [dialogProps, show, close, isOpen] = useDialog();
18+
const [dialogProps, show, close, isOpen] = useDialog({
19+
onSuccess: () => {
20+
setClassSubject(undefined);
21+
setActive(false);
22+
},
23+
});
1924

2025
const handleClassSelect = (subject: string | undefined) => {
2126
setClassSubject(subject);
@@ -30,8 +35,6 @@ export function CreateInstanceButton({ ontology }: CreateInstanceButtonProps) {
3035
const handleSave = (subject: string) => {
3136
ontology.pushPropVal(urls.properties.instances, [subject], true);
3237
ontology.save(store);
33-
setClassSubject(undefined);
34-
setActive(false);
3538
};
3639

3740
return (

browser/data-browser/src/views/OntologyPage/Property/PropertyLineWrite.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { urls, useCanWrite, useProperty, useResource } from '@tomic/react';
1+
import { core, useCanWrite, useProperty, useResource } from '@tomic/react';
22
import React from 'react';
33
import styled from 'styled-components';
44
import InputSwitcher from '../../../components/forms/InputSwitcher';
@@ -23,8 +23,8 @@ export function PropertyLineWrite({
2323
onRemove,
2424
}: PropertyLineWriteProps): JSX.Element {
2525
const resource = useResource(subject);
26-
const shortnameProp = useProperty(urls.properties.shortname);
27-
const descriptionProp = useProperty(urls.properties.description);
26+
const shortnameProp = useProperty(core.properties.shortname);
27+
const descriptionProp = useProperty(core.properties.description);
2828
const [dialogProps, show, hide] = useDialog();
2929
const [canEdit] = useCanWrite(resource);
3030

@@ -65,7 +65,11 @@ export function PropertyLineWrite({
6565
property={descriptionProp}
6666
/>
6767
<PropertyDatatypePicker disabled={disabled} resource={resource} />
68-
<IconButton title='open' color='textLight' onClick={show}>
68+
<IconButton
69+
title={`Configure ${resource.title}`}
70+
color='textLight'
71+
onClick={show}
72+
>
6973
<FaSlidersH />
7074
</IconButton>
7175
<IconButton

0 commit comments

Comments
 (0)