diff --git a/examples/kendo-react-freemium/src/App.tsx b/examples/kendo-react-freemium/src/App.tsx
index edd41298..93e8198b 100644
--- a/examples/kendo-react-freemium/src/App.tsx
+++ b/examples/kendo-react-freemium/src/App.tsx
@@ -8,6 +8,7 @@ import Tasks from "./pages/Tasks";
import Settings from "./pages/Settings";
import Team from "./pages/Team";
import Task from "./pages/Task";
+import NewTask from "./pages/NewTask";
export default function App() {
return (
@@ -20,6 +21,7 @@ export default function App() {
} />
} />
} />
+ } />
} />
} />
} />
diff --git a/examples/kendo-react-freemium/src/pages/Home.tsx b/examples/kendo-react-freemium/src/pages/Home.tsx
index 8f4d98f9..55a3965e 100644
--- a/examples/kendo-react-freemium/src/pages/Home.tsx
+++ b/examples/kendo-react-freemium/src/pages/Home.tsx
@@ -7,7 +7,6 @@ import { Calendar } from "@progress/kendo-react-dateinputs";
import { ListView, ListViewItemWrapper } from "@progress/kendo-react-listview";
import { pencilIcon, plusIcon, trashIcon } from "@progress/kendo-svg-icons";
import { tasksData, listData, projectsData, teamsData } from "./data";
-import React from "react";
import { useNavigate } from "react-router-dom";
const ListItemRender = (props: any) => {
@@ -24,27 +23,18 @@ const ListItemRender = (props: any) => {
export default function Home() {
const navigate = useNavigate();
- const [showAllProjects, setShowAllProjects] = React.useState(false);
- const [showAllTeams, setShowAllTeams] = React.useState(false);
- const [showAllTasks, setShowAllTasks] = React.useState(false);
-
const handleSeeAllProjectsClick = () => {
- setShowAllProjects(!showAllProjects);
+ navigate('/projects');
};
const handleSeeAllTeamsClick = () => {
- setShowAllTeams(!showAllTeams);
+ navigate('/team-management');
};
const handleSeeAllTasksClick = () => {
- setShowAllTasks(!showAllTasks);
+ navigate('/tasks');
}
- const projectsToShow = showAllProjects ? projectsData : projectsData.slice(0, 5);
- const teamsToShow = showAllTeams ? teamsData : teamsData.slice(0, 4);
-
- const tasksToShow = showAllTasks ? tasksData : tasksData.slice(0, 5);
-
return (
<>
@@ -57,8 +47,8 @@ export default function Home() {
- {projectsToShow.map((project, index) => {
- return
+ {projectsData.slice(0, 5).map((project, index) => {
+ return
navigate('/projects')} className="cursor-pointer">
{project.ProjectName}
@@ -80,7 +70,7 @@ export default function Home() {
-
+
@@ -93,7 +83,7 @@ export default function Home() {
Teams
- {teamsToShow.map((team, index) => {
+ {teamsData.slice(0, 4).map((team, index) => {
return
navigate('/team-management')} className="cursor-pointer">
@@ -108,7 +98,7 @@ export default function Home() {
})}
-
+
@@ -129,13 +119,13 @@ export default function Home() {
Tasks
-
+
-
+
diff --git a/examples/kendo-react-freemium/src/pages/NewTask.tsx b/examples/kendo-react-freemium/src/pages/NewTask.tsx
new file mode 100644
index 00000000..5395baa0
--- /dev/null
+++ b/examples/kendo-react-freemium/src/pages/NewTask.tsx
@@ -0,0 +1,230 @@
+import { useParams } from "react-router";
+import { useNavigate } from "react-router-dom";
+import { priorities, projectManagers, projectsData, tasksData, taskTags } from "./data";
+import { Button } from "@progress/kendo-react-buttons";
+import { Avatar, Breadcrumb, BreadcrumbLinkMouseEvent, ExpansionPanel, ExpansionPanelContent } from "@progress/kendo-react-layout";
+import { homeIcon, folderIcon, trashIcon, checkIcon } from "@progress/kendo-svg-icons";
+import { SvgIcon } from "@progress/kendo-react-common";
+import { Reveal } from '@progress/kendo-react-animation';
+import React, { ReactElement } from "react";
+import { TextArea } from "@progress/kendo-react-inputs";
+import { DropDownList, ListItemProps, MultiSelect, TagData } from "@progress/kendo-react-dropdowns";
+import { DateInput } from "@progress/kendo-react-dateinputs";
+import { FloatingLabel } from "@progress/kendo-react-labels";
+import { Badge } from "@progress/kendo-react-indicators";
+
+interface DataModel {
+ id: string;
+ text?: string;
+ icon?: React.ReactNode;
+}
+
+export default function Task() {
+ let params = useParams();
+ const navigate = useNavigate();
+ const [projExpanded, setProjExpanded] = React.useState(true);
+ const [dateExpanded, setDateExpanded] = React.useState(true);
+ const [assigneeExpanded, setAssigneeExpanded] = React.useState(true);
+ const [priorityExpanded, setPriorityExpanded] = React.useState(true);
+ const [statusExpanded, setStatusExpanded] = React.useState(true);
+ const [tagsExpanded, setTagsExpanded] = React.useState(true);
+ const [project, setProject] = React.useState();
+ const [assignee, setAssignee] = React.useState();
+ const [dueDate, setDueDate] = React.useState();
+ const [priority, setPriority] = React.useState();
+ const [status, setStatus] = React.useState();
+ const [tag, setTag] = React.useState();
+ const projects = projectsData.map(proj => { return proj.ProjectName }).slice(0, 10);
+ const assignees = tasksData.map(task => { return task.assignedTo });
+ const statuses = tasksData.map(task => { return task.status });
+
+ const breadcrumbItems: DataModel[] = [
+ {
+ id: "home",
+ icon: ,
+ },
+ {
+ id: "tasks",
+ text: "Tasks",
+ },
+ {
+ id: `${params.taskId}`,
+ text: `New Task`,
+ }
+ ];
+
+ const handleItemSelect = (e: BreadcrumbLinkMouseEvent) => {
+ if (e.id === 'home') {
+ navigate('/');
+ } else if (e.id === 'tasks') {
+ navigate('/tasks');
+ }
+ }
+
+ const tagRender = (tagData: TagData, li: ReactElement) => React.cloneElement(li, li.props, [
+
+
+
manager.name === tagData.data[0] ? manager.avatarSrc : "").filter(src => src !== "")[0]} alt="user-image" />
+
+ {tagData.data[0]}
+ , li.props.children]);
+
+ const itemRender = (li: React.ReactElement, itemProps: ListItemProps) => {
+ const index = itemProps.index;
+ console.log(itemProps);
+ const itemChildren = (
+
+
+
manager.name === itemProps.dataItem ? manager.avatarSrc : "").filter(src => src !== "")[0]} alt="user-image" />
+
+ {li.props.children as any} {index}
+
+ );
+
+ return React.cloneElement(li, li.props, itemChildren);
+};
+
+ const priorityValueRender = (element: React.ReactElement, value: any) => {
+ if (!value) {
+ return element;
+ }
+
+ const children = [
+
+ {element.props.children as any}
+
+ ];
+
+ return React.cloneElement(element, { ...element.props }, children);
+ };
+
+ const priorityItemRender = (li: React.ReactElement, itemProps: ListItemProps) => {
+ const itemChildren = (
+
+ {li.props.children as any}
+
+ );
+
+ return React.cloneElement(li, li.props, itemChildren);
+};
+
+ return (
+ <>
+
+
+
+
New Task
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ setProjExpanded(!projExpanded)} className="rounded-2xl">
+
+ {projExpanded &&
+
+ setProject(e.value as string)} data={projects} />
+
+ }
+
+
+ setAssigneeExpanded(!assigneeExpanded)} className="rounded-2xl">
+
+ {assigneeExpanded &&
+
+ setAssignee([...e.value] as string[])} tagRender={tagRender} itemRender={itemRender} />
+
+ }
+
+
+ setDateExpanded(!dateExpanded)} className="rounded-2xl">
+
+ {dateExpanded &&
+
+ setDueDate(e.value as Date)} />
+
+ }
+
+
+ setPriorityExpanded(!priorityExpanded)} className="rounded-2xl">
+
+ {priorityExpanded &&
+
+ setPriority(e.value as string)} data={priorities} valueRender={priorityValueRender} itemRender={priorityItemRender} />
+
+ }
+
+
+ setStatusExpanded(!statusExpanded)} className="rounded-2xl">
+
+ {statusExpanded &&
+
+ setStatus(e.value as string)} />
+
+ }
+
+
+ setTagsExpanded(!tagsExpanded)} className="rounded-2xl">
+
+ {tagsExpanded &&
+
+ setTag([...e.value] as string[])} />
+
+ }
+
+
+
+
+
+
+
+ Copyright © 2025 Progress Software. All rights reserved.
+
+ >
+ )
+}
\ No newline at end of file
diff --git a/examples/kendo-react-freemium/src/pages/Settings.tsx b/examples/kendo-react-freemium/src/pages/Settings.tsx
index 9e2cf9ec..d63ca5b3 100644
--- a/examples/kendo-react-freemium/src/pages/Settings.tsx
+++ b/examples/kendo-react-freemium/src/pages/Settings.tsx
@@ -129,7 +129,7 @@ export default function Settings() {
Contacts
-
+
setCountryValue(e.value as string)} suffix={() => {
return (
@@ -137,7 +137,7 @@ export default function Settings() {
)
}} />
-
+
setCityValue(e.value as string)} suffix={() => {
return (
@@ -145,7 +145,7 @@ export default function Settings() {
)
}}/>
-
+
setAddresslValue(e.value as string)} suffix={() => {
return (
diff --git a/examples/kendo-react-freemium/src/pages/Task.tsx b/examples/kendo-react-freemium/src/pages/Task.tsx
index db515ca2..99ea5750 100644
--- a/examples/kendo-react-freemium/src/pages/Task.tsx
+++ b/examples/kendo-react-freemium/src/pages/Task.tsx
@@ -1,6 +1,6 @@
import { useParams } from "react-router";
import { useNavigate } from "react-router-dom";
-import { priorities, projectManagers, projectsData, tasksData } from "./data";
+import { priorities, projectManagers, projectsData, tasksData, taskTags } from "./data";
import { Button } from "@progress/kendo-react-buttons";
import { Avatar, Breadcrumb, BreadcrumbLinkMouseEvent, ExpansionPanel, ExpansionPanelContent } from "@progress/kendo-react-layout";
import { homeIcon, folderIcon, trashIcon, checkIcon } from "@progress/kendo-svg-icons";
@@ -37,8 +37,7 @@ export default function Task() {
const [tag, setTag] = React.useState(tasksData.filter(task => task.taskId === params.taskId)[0].tags as string[]);
const projects = projectsData.map(proj => { return proj.ProjectName }).slice(0, 10);
const assignees = tasksData.map(task => { return task.assignedTo });
- const statuses = tasksData.map(task => { return task.status });
- const tags = tasksData.map(task => { return task.tags });
+ const statuses = tasksData.map(task => { return task.status });;
const breadcrumbItems: DataModel[] = [
{
@@ -225,7 +224,7 @@ Monitor key metrics post-launch to evaluate the effectiveness of the content man
setPriorityExpanded(!priorityExpanded)} className="rounded-2xl">
{priorityExpanded &&
-
+
setPriority(e.value as string)} data={priorities} valueRender={priorityValueRender} itemRender={priorityItemRender} />
}
@@ -234,7 +233,7 @@ Monitor key metrics post-launch to evaluate the effectiveness of the content man
setStatusExpanded(!statusExpanded)} className="rounded-2xl">
{statusExpanded &&
-
+
setStatus(e.value as string)} />
}
@@ -244,7 +243,7 @@ Monitor key metrics post-launch to evaluate the effectiveness of the content man
{tagsExpanded &&
- setTag([...e.value] as string[])} />
+ setTag([...e.value] as string[])} />
}
diff --git a/examples/kendo-react-freemium/src/pages/Tasks.tsx b/examples/kendo-react-freemium/src/pages/Tasks.tsx
index a0be8afc..90ec48a6 100644
--- a/examples/kendo-react-freemium/src/pages/Tasks.tsx
+++ b/examples/kendo-react-freemium/src/pages/Tasks.tsx
@@ -32,6 +32,10 @@ export default function Tasks() {
}
};
+ const addNewTask = () => {
+ navigate("/tasks/new");
+ };
+
const filterChange = (event: GridFilterChangeEvent) => {
setFilter(event.filter);
setData(filterBy(tasksData, event.filter));
@@ -66,7 +70,7 @@ export default function Tasks() {
Tasks
-
+