Skip to content

Commit

Permalink
chore(appwrite): update appwrite examples with cloud (refinedev#6168)
Browse files Browse the repository at this point in the history
  • Loading branch information
aliemir committed Jul 26, 2024
1 parent b17a1c3 commit d44de34
Show file tree
Hide file tree
Showing 30 changed files with 726 additions and 240 deletions.
56 changes: 42 additions & 14 deletions examples/data-provider-appwrite-tutorial-docs/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,20 @@ import routerProvider, {
NavigateToResource,
UnsavedChangesNotifier,
} from "@refinedev/react-router-v6";
import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom";

import "@refinedev/antd/dist/reset.css";
import { App as AntdApp, ConfigProvider } from "antd";
import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom";

import { appwriteClient, authProvider } from "./utility";

import { PostCreate, PostEdit, PostList, PostShow } from "./pages/posts";
import {
CategoryCreate,
CategoryList,
CategoryShow,
CategoryEdit,
} from "./pages/categories";

const App: React.FC = () => {
return (
Expand All @@ -28,22 +36,32 @@ const App: React.FC = () => {
<AntdApp>
<Refine
dataProvider={dataProvider(appwriteClient, {
databaseId: "6537bfaa2f54cd235e51",
databaseId: "default",
})}
liveProvider={liveProvider(appwriteClient, {
databaseId: "6537bfaa2f54cd235e51",
databaseId: "default",
})}
authProvider={authProvider}
routerProvider={routerProvider}
resources={[
{
name: "6537bff1acea7f73acbf",
name: "blog_posts",
list: "/posts",
create: "/posts/create",
edit: "/posts/edit/:id",
show: "/posts/show/:id",
meta: {
label: "Posts",
label: "Blog Posts",
},
},
{
name: "categories",
list: "/categories",
create: "/categories/create",
show: "/categories/show/:id",
edit: "/categories/edit/:id",
meta: {
label: "Categories",
},
},
]}
Expand All @@ -69,9 +87,7 @@ const App: React.FC = () => {
>
<Route
index
element={
<NavigateToResource resource="6537bff1acea7f73acbf" />
}
element={<NavigateToResource resource="blog_posts" />}
/>

<Route path="/posts">
Expand All @@ -80,22 +96,34 @@ const App: React.FC = () => {
<Route path="edit/:id" element={<PostEdit />} />
<Route path="show/:id" element={<PostShow />} />
</Route>
<Route path="/categories">
<Route index element={<CategoryList />} />
<Route path="create" element={<CategoryCreate />} />
<Route path="edit/:id" element={<CategoryEdit />} />
<Route path="show/:id" element={<CategoryShow />} />
</Route>
</Route>

<Route
element={
<Authenticated key="auth-pages" fallback={<Outlet />}>
<NavigateToResource resource="6537bff1acea7f73acbf" />
<NavigateToResource resource="blog_posts" />
</Authenticated>
}
>
<Route
path="/login"
element={<AuthPage forgotPasswordLink={false} />}
/>
<Route
path="/register"
element={<AuthPage type="register" />}
element={
<AuthPage
formProps={{
initialValues: {
remember: false,
email: "demo@refine.dev",
password: "demodemo",
},
}}
/>
}
/>
</Route>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
export interface ICategory {
id: string;
title: string;
}

export const IStatus = "draft" | "published" | "rejected";

export interface IFile {
name: string;
percent: number;
Expand All @@ -12,10 +19,18 @@ export interface IPost {
id: string;
title: string;
content: string;
status: IStatus;
category: {
$id: string;
title: string;
};
images: string;
}

export interface IPostVariables {
id: string;
title: string;
content: string;
category: string;
images: string;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { Create, useForm } from "@refinedev/antd";
import { Form, Input } from "antd";

import type { HttpError } from "@refinedev/core";
import type { ICategory } from "../../interfaces";

export const CategoryCreate = () => {
const { formProps, saveButtonProps } = useForm<
ICategory,
HttpError,
ICategory
>();

return (
<Create saveButtonProps={saveButtonProps}>
<Form {...formProps} layout="vertical">
<Form.Item
label="Title"
name="title"
rules={[
{
required: true,
},
]}
>
<Input />
</Form.Item>
</Form>
</Create>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { Edit, useForm } from "@refinedev/antd";
import { Form, Input } from "antd";

import type { HttpError } from "@refinedev/core";
import type { ICategory } from "../../interfaces";

export const CategoryEdit = () => {
const { formProps, saveButtonProps } = useForm<
ICategory,
HttpError,
ICategory
>({});

return (
<Edit saveButtonProps={saveButtonProps}>
<Form {...formProps} layout="vertical">
<Form.Item
label="Title"
name="title"
rules={[
{
required: true,
},
]}
>
<Input />
</Form.Item>
</Form>
</Edit>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export * from "./list";
export * from "./show";
export * from "./create";
export * from "./edit";
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { List, useTable, getDefaultSortOrder } from "@refinedev/antd";
import { Table } from "antd";

import type { ICategory } from "../../interfaces";

export const CategoryList = () => {
const { tableProps, sorters } = useTable<ICategory>();

return (
<List>
<Table {...tableProps} rowKey="id">
<Table.Column<ICategory>
dataIndex="id"
title="ID"
sorter
defaultSortOrder={getDefaultSortOrder("id", sorters)}
/>
<Table.Column<ICategory> dataIndex="title" title="Title" sorter />
</Table>
</List>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { useShow } from "@refinedev/core";

import { Show } from "@refinedev/antd";

import { Typography } from "antd";

import type { ICategory } from "../../interfaces";

const { Title, Text } = Typography;

export const CategoryShow = () => {
const { queryResult } = useShow<ICategory>();

const { data, isLoading } = queryResult;
const record = data?.data;

return (
<Show isLoading={isLoading}>
<Title level={5}>Id</Title>
<Text>{record?.id}</Text>

<Title level={5}>Title</Title>
<Text>{record?.title}</Text>
</Show>
);
};
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import type { HttpError } from "@refinedev/core";
import { Create, useForm } from "@refinedev/antd";
import { Form, Input } from "antd";
import { Create, useForm, useSelect } from "@refinedev/antd";
import { Form, Input, Select, Upload } from "antd";
import MDEditor from "@uiw/react-md-editor";

import { normalizeFile, statuses, storage } from "../../utility";

import type { IPost, IPostVariables } from "../../interfaces";
import type { HttpError } from "@refinedev/core";
import type { RcFile } from "antd/lib/upload/interface";
import type { IPost, IPostVariables, ICategory } from "../../interfaces";

export const PostCreate = () => {
const { formProps, saveButtonProps } = useForm<
Expand All @@ -11,9 +15,24 @@ export const PostCreate = () => {
IPostVariables
>();

const { selectProps: categorySelectProps } = useSelect<ICategory>({
resource: "categories",
optionLabel: "title",
optionValue: "id",
});

return (
<Create saveButtonProps={saveButtonProps}>
<Form {...formProps} layout="vertical">
<Form
{...formProps}
layout="vertical"
onFinish={(values) => {
formProps.onFinish?.({
...values,
images: JSON.stringify(values.images),
});
}}
>
<Form.Item
label="Title"
name="title"
Expand All @@ -25,7 +44,28 @@ export const PostCreate = () => {
>
<Input />
</Form.Item>

<Form.Item
label="Category"
name="category"
rules={[
{
required: true,
},
]}
>
<Select {...categorySelectProps} />
</Form.Item>
<Form.Item
label="Status"
name="status"
rules={[
{
required: true,
},
]}
>
<Select options={statuses} />
</Form.Item>
<Form.Item
label="Content"
name="content"
Expand All @@ -35,7 +75,42 @@ export const PostCreate = () => {
},
]}
>
<Input.TextArea rows={5} />
<MDEditor data-color-mode="light" />
</Form.Item>
<Form.Item label="Images">
<Form.Item
name="images"
valuePropName="fileList"
normalize={normalizeFile}
noStyle
>
<Upload.Dragger
name="file"
listType="picture"
multiple
customRequest={async ({ file, onError, onSuccess }) => {
try {
const rcFile = file as RcFile;

const { $id } = await storage.createFile(
"default",
rcFile.name,
rcFile,
);

const url = storage.getFileView("default", $id);

onSuccess?.({ url }, new XMLHttpRequest());
} catch (error) {
onError?.(new Error("Upload Error"));
}
}}
>
<p className="ant-upload-text">
Drag &amp; drop a file in this area
</p>
</Upload.Dragger>
</Form.Item>
</Form.Item>
</Form>
</Create>
Expand Down
Loading

0 comments on commit d44de34

Please sign in to comment.