mirror of
https://github.com/zadam/trilium.git
synced 2025-12-12 18:34:24 +01:00
feat(note_bars/collection): support number fields
This commit is contained in:
parent
e766b82418
commit
00df3c3d1f
@ -5,10 +5,11 @@ import Dropdown from "../react/Dropdown";
|
|||||||
import { FormDropdownDivider, FormDropdownSubmenu, FormListItem, FormListToggleableItem } from "../react/FormList";
|
import { FormDropdownDivider, FormDropdownSubmenu, FormListItem, FormListToggleableItem } from "../react/FormList";
|
||||||
import Icon from "../react/Icon";
|
import Icon from "../react/Icon";
|
||||||
import { useViewType, VIEW_TYPE_MAPPINGS } from "../ribbon/CollectionPropertiesTab";
|
import { useViewType, VIEW_TYPE_MAPPINGS } from "../ribbon/CollectionPropertiesTab";
|
||||||
import { bookPropertiesConfig, BookProperty, ButtonProperty, CheckBoxProperty, SplitButtonProperty } from "../ribbon/collection-properties-config";
|
import { bookPropertiesConfig, BookProperty, ButtonProperty, CheckBoxProperty, NumberProperty, SplitButtonProperty } from "../ribbon/collection-properties-config";
|
||||||
import { useNoteLabelBoolean } from "../react/hooks";
|
import { useNoteLabel, useNoteLabelBoolean } from "../react/hooks";
|
||||||
import { useContext } from "preact/hooks";
|
import { useContext } from "preact/hooks";
|
||||||
import { ParentComponent } from "../react/react_utils";
|
import { ParentComponent } from "../react/react_utils";
|
||||||
|
import FormTextBox from "../react/FormTextBox";
|
||||||
|
|
||||||
const ICON_MAPPINGS: Record<ViewTypeOptions, string> = {
|
const ICON_MAPPINGS: Record<ViewTypeOptions, string> = {
|
||||||
grid: "bx bxs-grid",
|
grid: "bx bxs-grid",
|
||||||
@ -83,6 +84,8 @@ function ViewProperty({ note, property }: { note: FNote, property: BookProperty
|
|||||||
return <SplitButtonPropertyView note={note} property={property} />;
|
return <SplitButtonPropertyView note={note} property={property} />;
|
||||||
case "checkbox":
|
case "checkbox":
|
||||||
return <CheckBoxPropertyView note={note} property={property} />;
|
return <CheckBoxPropertyView note={note} property={property} />;
|
||||||
|
case "number":
|
||||||
|
return <NumberPropertyView note={note} property={property} />;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,6 +126,29 @@ function SplitButtonPropertyView({ note, property }: { note: FNote, property: Sp
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function NumberPropertyView({ note, property }: { note: FNote, property: NumberProperty }) {
|
||||||
|
//@ts-expect-error Interop with text box which takes in string values even for numbers.
|
||||||
|
const [ value, setValue ] = useNoteLabel(note, property.bindToLabel);
|
||||||
|
const disabled = property.disabled?.(note);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormListItem
|
||||||
|
icon={property.icon}
|
||||||
|
disabled={disabled}
|
||||||
|
onClick={(e) => e.stopPropagation()}
|
||||||
|
>
|
||||||
|
{property.label}
|
||||||
|
<FormTextBox
|
||||||
|
type="number"
|
||||||
|
currentValue={value ?? ""} onChange={setValue}
|
||||||
|
style={{ width: (property.width ?? 100) }}
|
||||||
|
min={property.min ?? 0}
|
||||||
|
disabled={disabled}
|
||||||
|
/>
|
||||||
|
</FormListItem>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function CheckBoxPropertyView({ note, property }: { note: FNote, property: CheckBoxProperty }) {
|
function CheckBoxPropertyView({ note, property }: { note: FNote, property: CheckBoxProperty }) {
|
||||||
const [ value, setValue ] = useNoteLabelBoolean(note, property.bindToLabel);
|
const [ value, setValue ] = useNoteLabelBoolean(note, property.bindToLabel);
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -37,6 +37,15 @@ body.experimental-feature-new-layout {
|
|||||||
padding-inline-start: 24px;
|
padding-inline-start: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.title-details {
|
||||||
|
.dropdown-menu {
|
||||||
|
input.form-control {
|
||||||
|
padding: 2px 8px;
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.title-row {
|
.title-row {
|
||||||
margin-left: 12px;
|
margin-left: 12px;
|
||||||
|
|
||||||
|
|||||||
@ -155,7 +155,7 @@ function NumberPropertyView({ note, property }: { note: FNote, property: NumberP
|
|||||||
<FormTextBox
|
<FormTextBox
|
||||||
type="number"
|
type="number"
|
||||||
currentValue={value ?? ""} onChange={setValue}
|
currentValue={value ?? ""} onChange={setValue}
|
||||||
style={{ width: (property.width ?? 100) + "px" }}
|
style={{ width: (property.width ?? 100) }}
|
||||||
min={property.min ?? 0}
|
min={property.min ?? 0}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -41,6 +41,7 @@ export interface NumberProperty {
|
|||||||
bindToLabel: FilterLabelsByType<number>;
|
bindToLabel: FilterLabelsByType<number>;
|
||||||
width?: number;
|
width?: number;
|
||||||
min?: number;
|
min?: number;
|
||||||
|
icon?: string;
|
||||||
disabled?: (note: FNote) => boolean;
|
disabled?: (note: FNote) => boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,6 +161,7 @@ export const bookPropertiesConfig: Record<ViewTypeOptions, BookConfig> = {
|
|||||||
properties: [
|
properties: [
|
||||||
{
|
{
|
||||||
label: t("book_properties_config.max-nesting-depth"),
|
label: t("book_properties_config.max-nesting-depth"),
|
||||||
|
icon: "bx bx-subdirectory-right",
|
||||||
type: "number",
|
type: "number",
|
||||||
bindToLabel: "maxNestingDepth",
|
bindToLabel: "maxNestingDepth",
|
||||||
width: 65,
|
width: 65,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user