Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
1a792d0
converter v1
vogievetsky Nov 5, 2019
7626cb3
working v1
vogievetsky Nov 5, 2019
1a036bd
update tests
vogievetsky Nov 6, 2019
6183453
update tests
vogievetsky Nov 6, 2019
afe963c
Merge branch 'master-upstream' into neo-spec
vogievetsky Nov 6, 2019
92733da
upgrades
vogievetsky Nov 6, 2019
95682f4
Merge branch 'master-upstream' into neo-spec
vogievetsky Nov 18, 2019
46a0c18
adjust to new API
vogievetsky Nov 18, 2019
2f79062
Merge branch 'master-upstream' into neo-spec
vogievetsky Nov 21, 2019
d74f17e
remove hack
vogievetsky Nov 21, 2019
fe4d849
fwd
vogievetsky Nov 22, 2019
225e58c
step
vogievetsky Nov 23, 2019
6f64d72
neo cache
vogievetsky Nov 23, 2019
9ed6c6e
fix time selection
vogievetsky Nov 23, 2019
9d74767
smart reset
vogievetsky Nov 24, 2019
791ce3b
parquest autodetection
vogievetsky Nov 26, 2019
04114a6
Merge branch 'master-upstream' into neo-spec
vogievetsky Nov 26, 2019
8e5399e
add binaryAsString option
vogievetsky Nov 26, 2019
212237c
partitionsSpec
vogievetsky Nov 29, 2019
226f26d
add ORC support
vogievetsky Dec 1, 2019
6f463d1
ingestSegment -> druid
vogievetsky Dec 2, 2019
ff65617
remove index tasks
vogievetsky Dec 3, 2019
38efe02
better min
vogievetsky Dec 3, 2019
eb8fb6f
load data works
vogievetsky Dec 3, 2019
ce0be19
remove downgrade
vogievetsky Dec 3, 2019
a0abb31
filter on group_id
vogievetsky Dec 3, 2019
531d5c7
fix group_id in test
vogievetsky Dec 4, 2019
2d293e8
update auto form for new props
vogievetsky Dec 4, 2019
e41d5a5
add dropBeforeByPeriod rule
vogievetsky Dec 5, 2019
d7c82ec
simplify
vogievetsky Dec 5, 2019
372ad51
prettify json
vogievetsky Dec 5, 2019
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
File renamed without changes
File renamed without changes
11 changes: 7 additions & 4 deletions web-console/src/components/array-input/array-input.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { compact } from '../../utils';

export interface ArrayInputProps {
className?: string;
values: string[];
values: string[] | undefined;
onChange: (newValues: string[] | undefined) => void;
placeholder?: string;
large?: boolean;
Expand All @@ -40,8 +40,11 @@ export const ArrayInput = React.memo(function ArrayInput(props: ArrayInputProps)
const stringValue = e.target.value;
const newValues: string[] = stringValue.split(/[,\s]+/).map((v: string) => v.trim());
const newValuesFiltered = compact(newValues);
if (newValues.length === newValuesFiltered.length) {
onChange(stringValue === '' ? undefined : newValuesFiltered);
if (stringValue === '') {
onChange(undefined);
setStringValue(undefined);
} else if (newValues.length === newValuesFiltered.length) {
onChange(newValuesFiltered);
setStringValue(undefined);
} else {
setStringValue(stringValue);
Expand All @@ -51,7 +54,7 @@ export const ArrayInput = React.memo(function ArrayInput(props: ArrayInputProps)
return (
<TextArea
className={className}
value={stringValue || props.values.join(', ')}
value={stringValue || (props.values || []).join(', ')}
onChange={handleChange}
placeholder={placeholder}
large={large}
Expand Down
82 changes: 48 additions & 34 deletions web-console/src/components/auto-form/auto-form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@ import { FormGroupWithInfo } from '../form-group-with-info/form-group-with-info'
import { IntervalInput } from '../interval-input/interval-input';
import { JsonInput } from '../json-input/json-input';
import { PopoverText } from '../popover-text/popover-text';
import { SuggestibleInput, SuggestionGroup } from '../suggestible-input/suggestible-input';
import { SuggestibleInput, Suggestion } from '../suggestible-input/suggestible-input';

import './auto-form.scss';

export interface Field<T> {
export type Functor<M, R> = R | ((model: M) => R);

export interface Field<M> {
name: string;
label?: string;
info?: React.ReactNode;
Expand All @@ -43,12 +45,14 @@ export interface Field<T> {
| 'json'
| 'interval';
defaultValue?: any;
suggestions?: (string | SuggestionGroup)[];
suggestions?: Functor<M, Suggestion[]>;
placeholder?: string;
min?: number;
disabled?: boolean | ((model: T) => boolean);
defined?: boolean | ((model: T) => boolean);
required?: boolean | ((model: T) => boolean);
zeroMeansUndefined?: boolean;
disabled?: Functor<M, boolean>;
defined?: Functor<M, boolean>;
required?: Functor<M, boolean>;
adjustment?: (model: M) => M;
}

export interface AutoFormProps<T> {
Expand All @@ -73,21 +77,16 @@ export class AutoForm<T extends Record<string, any>> extends React.PureComponent
return newLabel;
}

static evaluateFunctor<T>(
functor: undefined | boolean | ((model: T) => boolean),
model: T | undefined,
defaultValue = false,
): boolean {
static evaluateFunctor<M, R>(
functor: undefined | Functor<M, R>,
model: M | undefined,
defaultValue: R,
): R {
if (!model || functor == null) return defaultValue;
switch (typeof functor) {
case 'boolean':
return functor;

case 'function':
return functor(model);

default:
throw new TypeError(`invalid functor`);
if (typeof functor === 'function') {
return (functor as any)(model);
} else {
return functor;
}
}

Expand All @@ -109,27 +108,42 @@ export class AutoForm<T extends Record<string, any>> extends React.PureComponent
};

private modelChange = (newModel: T) => {
const { fields, onChange } = this.props;
const { fields, onChange, model } = this.props;

// Delete things that are not defined now (but were defined prior to the change)
for (const someField of fields) {
if (!AutoForm.evaluateFunctor(someField.defined, newModel, true)) {
if (
!AutoForm.evaluateFunctor(someField.defined, newModel, true) &&
AutoForm.evaluateFunctor(someField.defined, model, true)
) {
newModel = deepDelete(newModel, someField.name);
}
}

// Perform any adjustments if needed
for (const someField of fields) {
if (someField.adjustment) {
newModel = someField.adjustment(newModel);
}
}

onChange(newModel);
};

private renderNumberInput(field: Field<T>): JSX.Element {
const { model, large, onFinalize } = this.props;

const modelValue = deepGet(model as any, field.name) || field.defaultValue;
let modelValue = deepGet(model as any, field.name);
if (typeof modelValue !== 'number') modelValue = field.defaultValue;
return (
<NumericInput
value={modelValue}
onValueChange={(valueAsNumber: number, valueAsString: string) => {
if (valueAsString === '' || isNaN(valueAsNumber)) return;
this.fieldChange(field, valueAsNumber);
this.fieldChange(
field,
valueAsNumber === 0 && field.zeroMeansUndefined ? undefined : valueAsNumber,
);
}}
onBlur={e => {
if (e.target.value === '') {
Expand All @@ -140,10 +154,10 @@ export class AutoForm<T extends Record<string, any>> extends React.PureComponent
min={field.min || 0}
fill
large={large}
disabled={AutoForm.evaluateFunctor(field.disabled, model)}
disabled={AutoForm.evaluateFunctor(field.disabled, model, false)}
placeholder={field.placeholder}
intent={
AutoForm.evaluateFunctor(field.required, model) && modelValue == null
AutoForm.evaluateFunctor(field.required, model, false) && modelValue == null
? AutoForm.REQUIRED_INTENT
: undefined
}
Expand All @@ -169,7 +183,7 @@ export class AutoForm<T extends Record<string, any>> extends React.PureComponent
majorStepSize={1000000}
fill
large={large}
disabled={AutoForm.evaluateFunctor(field.disabled, model)}
disabled={AutoForm.evaluateFunctor(field.disabled, model, false)}
/>
);
}
Expand All @@ -190,11 +204,11 @@ export class AutoForm<T extends Record<string, any>> extends React.PureComponent
}}
onFinalize={onFinalize}
placeholder={field.placeholder}
suggestions={field.suggestions}
suggestions={AutoForm.evaluateFunctor(field.suggestions, model, undefined)}
large={large}
disabled={AutoForm.evaluateFunctor(field.disabled, model)}
disabled={AutoForm.evaluateFunctor(field.disabled, model, false)}
intent={
AutoForm.evaluateFunctor(field.required, model) && modelValue == null
AutoForm.evaluateFunctor(field.required, model, false) && modelValue == null
? AutoForm.REQUIRED_INTENT
: undefined
}
Expand All @@ -206,9 +220,9 @@ export class AutoForm<T extends Record<string, any>> extends React.PureComponent
const { model, large, onFinalize } = this.props;
const modelValue = deepGet(model as any, field.name);
const shownValue = modelValue == null ? field.defaultValue : modelValue;
const disabled = AutoForm.evaluateFunctor(field.disabled, model);
const disabled = AutoForm.evaluateFunctor(field.disabled, model, false);
const intent =
AutoForm.evaluateFunctor(field.required, model) && modelValue == null
AutoForm.evaluateFunctor(field.required, model, false) && modelValue == null
? AutoForm.REQUIRED_INTENT
: undefined;

Expand Down Expand Up @@ -263,9 +277,9 @@ export class AutoForm<T extends Record<string, any>> extends React.PureComponent
}}
placeholder={field.placeholder}
large={large}
disabled={AutoForm.evaluateFunctor(field.disabled, model)}
disabled={AutoForm.evaluateFunctor(field.disabled, model, false)}
intent={
AutoForm.evaluateFunctor(field.required, model) && modelValue == null
AutoForm.evaluateFunctor(field.required, model, false) && modelValue == null
? AutoForm.REQUIRED_INTENT
: undefined
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,59 +90,54 @@ exports[`rule editor matches snapshot 1`] = `
>
<select>
<option
value="load"
value="loadForever"
>
Load
loadForever
</option>
<option
value="drop"
value="loadByInterval"
>
Drop
loadByInterval
</option>
<option
value="broadcast"
value="loadByPeriod"
>
Broadcast
loadByPeriod
</option>
</select>
<span
class="bp3-icon bp3-icon-double-caret-vertical"
icon="double-caret-vertical"
>
<svg
data-icon="double-caret-vertical"
height="16"
viewBox="0 0 16 16"
width="16"
<option
value="dropForever"
>
<desc>
double-caret-vertical
</desc>
<path
d="M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2 8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z"
fill-rule="evenodd"
/>
</svg>
</span>
</div>
<div
class="bp3-html-select"
>
<select>
dropForever
</option>
<option
value="dropByInterval"
>
dropByInterval
</option>
<option
value="dropByPeriod"
>
dropByPeriod
</option>
<option
value="dropBeforeByPeriod"
>
dropBeforeByPeriod
</option>
<option
value="Forever"
value="broadcastForever"
>
forever
broadcastForever
</option>
<option
value="ByPeriod"
value="broadcastByInterval"
>
by period
broadcastByInterval
</option>
<option
value="ByInterval"
value="broadcastByPeriod"
>
by interval
broadcastByPeriod
</option>
</select>
<span
Expand Down
7 changes: 2 additions & 5 deletions web-console/src/components/rule-editor/rule-editor.scss
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,7 @@
}
}

.by-period {
display: flex;
.bp3-input-group {
padding-right: 15px;
}
.include-future {
margin-left: 15px;
}
}
Loading