import { Field, Model } from "@akanjs/constant";
@Model()
export class Project {
@Field()
id: string;
title: string;
description: string;
status: "active" | "completed" | "archived";
createdAt: Date;
updatedAt: Date;
}
import { Project } from "./project.constant";
export const projectService = {
async getProjects() {
return Project.find().sort({ updatedAt: -1 });
},
async createProject(data: Partial<Project>) {
return Project.create(data);
};
import { Signal } from "@akanjs/signal";
import { projectService } from "./project.service";
export class ProjectSignal {
@Signal()
async projectList() {
return projectService.getProjects();
return projectService.createProject(data);
import { usePage } from "@akanjs/client";
import { projectSignal } from "./project.signal";
export const ProjectView = () => {
const { data } = projectSignal.useProjectList();
const { l } = usePage();
return (
<div>
<h1>{l("project.modelName")}</h1>
<div className="grid gap-4">
{data?.map((project) => <ProjectUnit key={project.id} project={project} />)}
</div>
);
Page-level components that display a full page or section
Card or list item components that display a single instance
Form components for creating or editing models
Layout containers that organize multiple components