Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
5e7e2fa
Merge branch 'v2' into feature/kanban
mguellsegarra Oct 29, 2025
3aec975
feat: initial types for kanban view
mguellsegarra Oct 29, 2025
74e4a6e
feat: action bar + strings
mguellsegarra Oct 29, 2025
314e729
feat: kanban wip
mguellsegarra Oct 30, 2025
ae3607d
feat: reuse treeactionbar and context for kanban, make it generic
mguellsegarra Oct 30, 2025
21258e6
fix: allow title header to show selected records for kanban
mguellsegarra Oct 31, 2025
842167f
feat: improve height calculation for kanban board
mguellsegarra Oct 31, 2025
4040fc6
feat: more improvements for kanban
mguellsegarra Nov 6, 2025
7bb1c11
feat: add new overriding for kanban components from tree ones
mguellsegarra Nov 6, 2025
dab70c5
fix: use new kanbancomponents
mguellsegarra Nov 6, 2025
d49a6fd
feat: more improvements
mguellsegarra Nov 6, 2025
af5ad13
fix: minor adjustments for ui
mguellsegarra Nov 6, 2025
3942e5e
fix: adjust height calculations
mguellsegarra Nov 6, 2025
358b28a
feat: ribbon for status
mguellsegarra Nov 6, 2025
993ea41
fix: status icon for cards
mguellsegarra Nov 6, 2025
cf8dd65
fix: adjust margin
mguellsegarra Nov 6, 2025
deb27d9
feat: more improvements
mguellsegarra Nov 6, 2025
87467fa
feat: more adjustments
mguellsegarra Nov 7, 2025
0c17fbd
feat: share results between tree & kanban + filters
mguellsegarra Nov 11, 2025
e19d576
feat: support name search
mguellsegarra Nov 11, 2025
bbad409
fix: minor ts issues
mguellsegarra Nov 11, 2025
690072b
feat: add order and fix color+status
mguellsegarra Nov 11, 2025
65baaf9
feat: column domain, virtualizataion, and lots of improvements
mguellsegarra Nov 12, 2025
732c337
fix: add justify center
mguellsegarra Nov 12, 2025
d63c9b6
fix: use search count for virtualization
mguellsegarra Nov 12, 2025
7c858ce
fix: ditch justify
mguellsegarra Nov 12, 2025
538edf0
feat: more work in kanban
mguellsegarra Nov 13, 2025
afc63fe
fix: update package-lock.json
mguellsegarra Nov 13, 2025
f015644
feat: improve kanban
mguellsegarra Nov 13, 2025
7beece9
feat: add card feature
mguellsegarra Nov 13, 2025
3ba0cc2
fix: add raw execute type
mguellsegarra Nov 13, 2025
4c9d782
feat: card drag and drop
mguellsegarra Nov 13, 2025
0ac2b96
feat: new useProcessAction hook
mguellsegarra Nov 18, 2025
95299bf
fix: remove useless things
mguellsegarra Nov 18, 2025
12488ea
fix: adjust drag and empty columns
mguellsegarra Nov 18, 2025
6a9357c
fix: more adjustments
mguellsegarra Nov 18, 2025
b204913
fix: improvmentes
mguellsegarra Nov 18, 2025
77400ae
fix: simplify update records approach
mguellsegarra Nov 18, 2025
84cba8f
feat: more improvements
mguellsegarra Nov 18, 2025
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
1 change: 0 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
- `npm run check` (project lint pipeline).
- `npx eslint src --ext .ts,.tsx` (scope this to touched files when practical).
- `npm run build:tsc` for the TypeScript check that respects `tsconfig.build.json`.
- `npm run build:vite` to ensure the library bundles cleanly. `npm run build` executes both checks in parallel if preferred.
- `npm run check` only triggers lint-staged; it does **not** cover the required TypeScript or ESLint passes.
- `npm run build:tsc` runs `tsc -p tsconfig.build.json --noEmit`, satisfying the `npx tsc --noEmit` requirement.
- Fix every ESLint warning and TypeScript error before handing work back.
Expand Down
26 changes: 26 additions & 0 deletions package-lock.json

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

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"@gisce/react-formiga-components": "1.18.0",
"@gisce/react-formiga-table": "1.16.1",
"@monaco-editor/react": "^4.4.5",
"@tanstack/react-virtual": "^3.13.12",
"@types/deep-equal": "^1.0.4",
"antd": "5.25.1",
"buffer": "^6.0.3",
Expand Down
2 changes: 2 additions & 0 deletions src/actionbar/ChangeViewButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
FormOutlined,
AreaChartOutlined,
CalendarOutlined,
BorderOuterOutlined,
} from "@ant-design/icons";
import {
useLocale,
Expand All @@ -30,6 +31,7 @@ const iconsForViewTypes = {
form: <FormOutlined />,
graph: <AreaChartOutlined />,
calendar: <CalendarOutlined />,
kanban: <BorderOuterOutlined />,
};

function getIconForView(view?: View) {
Expand Down
78 changes: 36 additions & 42 deletions src/actionbar/TreeActionBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,15 +73,15 @@ function TreeActionBarComponent({
duplicatingItem,
setDuplicatingItem,
currentModel,
searchTreeRef,
viewRef,
setCurrentId,
setCurrentItemIndex,
searchParams,
searchVisible,
setSearchVisible,
setSearchTreeNameSearch,
searchTreeNameSearch,
treeIsLoading,
setSearchNameSearch,
searchNameSearch,
viewIsLoading,
setPreviousView,
previousView,
results,
Expand All @@ -106,8 +106,8 @@ function TreeActionBarComponent({
const { showErrorNotification } = useErrorNotification();

const handleRefresh = useCallback(() => {
searchTreeRef?.current?.refreshResults();
}, [searchTreeRef]);
viewRef?.current?.refreshResults();
}, [viewRef]);

const handleToggleSearch = useCallback(() => {
setSearchVisible?.(!searchVisible);
Expand All @@ -118,7 +118,7 @@ function TreeActionBarComponent({
model: currentModel,
view_id: currentView?.view_id,
treeView: currentView,
disabled: treeIsLoading,
disabled: viewIsLoading,
parentContext,
selectedRowItems,
onRefreshParentValues: handleRefresh,
Expand All @@ -132,10 +132,8 @@ function TreeActionBarComponent({
});

const hasNameSearch = useMemo(
() =>
searchTreeNameSearch !== undefined &&
searchTreeNameSearch.trim().length > 0,
[searchTreeNameSearch],
() => searchNameSearch !== undefined && searchNameSearch.trim().length > 0,
[searchNameSearch],
);

const finalDomain = useMemo(() => {
Expand All @@ -152,7 +150,7 @@ function TreeActionBarComponent({
context: { ...parentContext },
});
if (newId) {
searchTreeRef?.current?.refreshResults();
viewRef?.current?.refreshResults();
}
} catch (e) {
showErrorNotification(e);
Expand All @@ -162,7 +160,7 @@ function TreeActionBarComponent({
}, [
currentModel,
parentContext,
searchTreeRef,
viewRef,
selectedRowItems,
setDuplicatingItem,
showErrorNotification,
Expand All @@ -178,7 +176,7 @@ function TreeActionBarComponent({
});
setCurrentId?.(undefined);
setCurrentItemIndex?.(undefined);
searchTreeRef?.current?.refreshResults();
viewRef?.current?.refreshResults();
} catch (e) {
showErrorNotification(e);
} finally {
Expand All @@ -187,7 +185,7 @@ function TreeActionBarComponent({
}, [
currentModel,
parentContext,
searchTreeRef,
viewRef,
selectedRowItems,
setCurrentId,
setCurrentItemIndex,
Expand All @@ -205,32 +203,28 @@ function TreeActionBarComponent({

const handleSearch = useCallback(
(searchString?: string) => {
if (searchString === searchTreeNameSearch) {
if (searchString === searchNameSearch) {
return;
}

if (
searchString &&
searchString.trim().length > 0 &&
!searchTreeNameSearch
) {
if (searchString && searchString.trim().length > 0 && !searchNameSearch) {
setSearchParams?.([]);
setSearchValues?.({});
}

setSearchTreeNameSearch?.(searchString);
if (searchTreeNameSearch !== undefined) {
setSearchNameSearch?.(searchString);
if (searchNameSearch !== undefined) {
setTimeout(() => {
searchTreeRef?.current?.refreshResults();
viewRef?.current?.refreshResults();
}, 50);
}
},
[
searchTreeNameSearch,
setSearchTreeNameSearch,
searchNameSearch,
setSearchNameSearch,
setSearchParams,
setSearchValues,
searchTreeRef,
viewRef,
],
);

Expand Down Expand Up @@ -273,17 +267,17 @@ function TreeActionBarComponent({
);

useEffect(() => {
if (treeType === "infinite" && searchTreeNameSearch === undefined) {
if (treeType === "infinite" && searchNameSearch === undefined) {
if (isFirstMount.current) {
isFirstMount.current = false;
return;
}

setTimeout(() => {
searchTreeRef?.current?.refreshResults();
viewRef?.current?.refreshResults();
}, 0);
}
}, [treeType, searchTreeNameSearch, searchTreeRef]);
}, [treeType, searchNameSearch, viewRef]);

useHotkeys(
"ctrl+l,command+l",
Expand Down Expand Up @@ -326,7 +320,7 @@ function TreeActionBarComponent({

return (
<Space wrap={true}>
{treeIsLoading && (
{viewIsLoading && (
<>
<Spin />
<ActionBarSeparator />
Expand All @@ -336,8 +330,8 @@ function TreeActionBarComponent({
{!treeExpandable && (
<>
<SearchBar
disabled={duplicatingItem || removingItem || treeIsLoading}
searchText={searchTreeNameSearch}
disabled={duplicatingItem || removingItem || viewIsLoading}
searchText={searchNameSearch}
onSearch={handleSearch}
/>
{savedSearchesEnabled && treeType !== "legacy" ? (
Expand All @@ -346,7 +340,7 @@ function TreeActionBarComponent({
searchVisible={!!searchVisible}
onToggleSearch={handleToggleSearch}
searchParams={searchParams}
disabled={duplicatingItem || removingItem || treeIsLoading}
disabled={duplicatingItem || removingItem || viewIsLoading}
onApplySearch={handleRefresh}
onRefetchSavedSearches={onRefetchSavedSearches}
onClearSavedSearch={onClearSavedSearch}
Expand All @@ -361,20 +355,20 @@ function TreeActionBarComponent({
tooltip={t("advanced_search")}
type={searchVisible ? "primary" : "default"}
onClick={() => setSearchVisible?.(!searchVisible)}
disabled={duplicatingItem || removingItem || treeIsLoading}
disabled={duplicatingItem || removingItem || viewIsLoading}
badgeNumber={searchParams?.length}
/>
)}
<ActionBarSeparator />
<NewButton disabled={treeIsLoading || !permissions?.create} />
<NewButton disabled={viewIsLoading || !permissions?.create} />
<ActionButton
icon={<CopyOutlined />}
tooltip={t("duplicate")}
disabled={
!selectedRowItems ||
selectedRowItems?.length !== 1 ||
duplicatingItem ||
treeIsLoading ||
viewIsLoading ||
!permissions?.create
}
loading={duplicatingItem}
Expand All @@ -385,7 +379,7 @@ function TreeActionBarComponent({
tooltip={t("delete")}
disabled={
!(selectedRowItems && selectedRowItems?.length > 0) ||
treeIsLoading ||
viewIsLoading ||
!permissions?.unlink
}
loading={removingItem}
Expand All @@ -398,14 +392,14 @@ function TreeActionBarComponent({
icon={<InfoCircleOutlined />}
tooltip={t("showLogs")}
disabled={
!(selectedRowItems && selectedRowItems?.length === 1) || treeIsLoading
!(selectedRowItems && selectedRowItems?.length === 1) || viewIsLoading
}
onClick={() => showLogInfo(currentModel!, selectedRowItems![0].id, t)}
/>
<ActionButton
icon={<ReloadOutlined />}
tooltip={t("refresh")}
disabled={duplicatingItem || removingItem || treeIsLoading}
disabled={duplicatingItem || removingItem || viewIsLoading}
onClick={handleRefresh}
/>
{!treeExpandable && (
Expand All @@ -416,7 +410,7 @@ function TreeActionBarComponent({
availableViews={availableViews}
onChangeView={handleChangeView}
previousView={previousView}
disabled={treeIsLoading}
disabled={viewIsLoading}
/>
</>
)}
Expand Down Expand Up @@ -446,7 +440,7 @@ function TreeActionBarComponent({
]}
onItemClick={handleExportAction}
disabled={
duplicatingItem || removingItem || treeIsLoading || hasNameSearch
duplicatingItem || removingItem || viewIsLoading || hasNameSearch
}
/>
<ExportModal
Expand Down
Loading
Loading