updated the course index part

This commit is contained in:
philipcheung 2025-01-22 18:22:04 +08:00
parent b84d9bda94
commit 7644ba35c1
68 changed files with 33316 additions and 27 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

8
.env
View File

@ -1,15 +1,15 @@
# Domain
# This would be set to the production domain with an env var on deployment
DOMAIN=oneandallmusic.net
#DOMAIN=oneandallmusic.net
DOMAIN=localhost
# Environment: local, staging, production
ENVIRONMENT=staging
ENVIRONMENT=local
PROJECT_NAME="One & All"
STACK_NAME=oneandallcms
# Backend
BACKEND_CORS_ORIGINS="http://localhost,http://localhost:5173,https://localhost,https://localhost:5173,http://localhost.tiangolo.com,https://cms.oneandallmusic.net,https://oneandallmusic.net,https://cms.oneandallmusic.net,https://oneandallmusic.net/login"
BACKEND_CORS_ORIGINS="http://cms.localhost,http://localhost,http://localhost:5173,https://localhost,https://localhost:5173,http://localhost.tiangolo.com,https://cms.oneandallmusic.net,https://oneandallmusic.net,https://cms.oneandallmusic.net,https://oneandallmusic.net/login"
SECRET_KEY=iFI0ZUdPVVZp7CNz6nmJYD0gM-xWaia291CWxi2JEaY
FIRST_SUPERUSER=oneandall.music@gmail.com
FIRST_SUPERUSER_PASSWORD=Wingwingk3

BIN
One & All/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,18 @@
meta {
name: Create Aboutus
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/v1/aboutUs/
body: multipartForm
auth: none
}
body:multipart-form {
description:
title:
image:
index:
}

View File

@ -0,0 +1,15 @@
meta {
name: Delete Aboutus
type: http
seq: 4
}
delete {
url: {{baseUrl}}/api/v1/aboutUs/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,22 @@
meta {
name: Edit Aboutus
type: http
seq: 3
}
put {
url: {{baseUrl}}/api/v1/aboutUs/:id
body: multipartForm
auth: none
}
params:path {
id:
}
body:multipart-form {
description:
image:
title:
index:
}

View File

@ -0,0 +1,16 @@
meta {
name: Read Aboutus List
type: http
seq: 2
}
get {
url: {{baseUrl}}/api/v1/aboutUs/
body: none
auth: none
}
params:query {
~skip:
~limit:
}

9
One & All/bruno.json Normal file
View File

@ -0,0 +1,9 @@
{
"version": "1",
"name": "One & All",
"type": "collection",
"ignore": [
"node_modules",
".git"
]
}

0
One & All/collection.bru Normal file
View File

View File

@ -0,0 +1,22 @@
meta {
name: Create Item
type: http
seq: 2
}
post {
url: {{baseUrl}}/api/v1/course/
body: json
auth: none
}
body:json {
{
"title": "",
"sort_description": "",
"long_description": "",
"information": "",
"contant": "",
"remark": ""
}
}

View File

@ -0,0 +1,15 @@
meta {
name: Delete Course
type: http
seq: 5
}
delete {
url: {{baseUrl}}/api/v1/course/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,15 @@
meta {
name: Read Course
type: http
seq: 3
}
get {
url: {{baseUrl}}/api/v1/course/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,16 @@
meta {
name: Read Courses
type: http
seq: 1
}
get {
url: {{baseUrl}}/api/v1/course/
body: none
auth: none
}
params:query {
~skip:
~limit:
}

View File

@ -0,0 +1,26 @@
meta {
name: Update Course
type: http
seq: 4
}
put {
url: {{baseUrl}}/api/v1/course/:id
body: json
auth: none
}
params:path {
id:
}
body:json {
{
"title": "",
"sort_description": "",
"long_description": "",
"information": "",
"contant": "",
"remark": ""
}
}

View File

@ -0,0 +1,17 @@
meta {
name: Create Image
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/v1/image/
body: multipartForm
auth: none
}
body:multipart-form {
image:
index:
course_id:
}

View File

@ -0,0 +1,15 @@
meta {
name: Delete Image
type: http
seq: 3
}
delete {
url: {{baseUrl}}/api/v1/image/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,19 @@
meta {
name: Edit Image
type: http
seq: 2
}
put {
url: {{baseUrl}}/api/v1/image/:id
body: none
auth: none
}
params:query {
index:
}
params:path {
id:
}

View File

@ -0,0 +1,17 @@
meta {
name: Create Info Image
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/v1/info_image/
body: multipartForm
auth: none
}
body:multipart-form {
image:
index:
course_id:
}

View File

@ -0,0 +1,15 @@
meta {
name: Delete Info Image
type: http
seq: 3
}
delete {
url: {{baseUrl}}/api/v1/info_image/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,19 @@
meta {
name: Edit Info Image
type: http
seq: 2
}
put {
url: {{baseUrl}}/api/v1/info_image/:id
body: none
auth: none
}
params:query {
index:
}
params:path {
id:
}

15
One & All/items/Agcd.bru Normal file
View File

@ -0,0 +1,15 @@
meta {
name: Agcd
type: http
seq: 3
}
get {
url: {{baseUrl}}/api/v1/items/items/:item_id
body: none
auth: none
}
params:path {
item_id:
}

View File

@ -0,0 +1,18 @@
meta {
name: Create Item
type: http
seq: 2
}
post {
url: {{baseUrl}}/api/v1/items/
body: json
auth: none
}
body:json {
{
"title": "",
"description": ""
}
}

View File

@ -0,0 +1,15 @@
meta {
name: Delete Item
type: http
seq: 6
}
delete {
url: {{baseUrl}}/api/v1/items/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,15 @@
meta {
name: Read Item
type: http
seq: 4
}
get {
url: {{baseUrl}}/api/v1/items/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,16 @@
meta {
name: Read Items
type: http
seq: 1
}
get {
url: {{baseUrl}}/api/v1/items/
body: none
auth: none
}
params:query {
~skip:
~limit:
}

View File

@ -0,0 +1,22 @@
meta {
name: Update Item
type: http
seq: 5
}
put {
url: {{baseUrl}}/api/v1/items/:id
body: json
auth: none
}
params:path {
id:
}
body:json {
{
"title": "",
"description": ""
}
}

View File

@ -0,0 +1,20 @@
meta {
name: Login Access Token
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/v1/login/access-token
body: formUrlEncoded
auth: none
}
body:form-urlencoded {
grant_type:
username:
password:
scope:
client_id:
client_secret:
}

View File

@ -0,0 +1,15 @@
meta {
name: Recover Password Html Content
type: http
seq: 5
}
post {
url: {{baseUrl}}/api/v1/password-recovery-html-content/:email
body: none
auth: none
}
params:path {
email:
}

View File

@ -0,0 +1,15 @@
meta {
name: Recover Password
type: http
seq: 3
}
post {
url: {{baseUrl}}/api/v1/password-recovery/:email
body: none
auth: none
}
params:path {
email:
}

View File

@ -0,0 +1,18 @@
meta {
name: Reset Password
type: http
seq: 4
}
post {
url: {{baseUrl}}/api/v1/reset-password/
body: json
auth: none
}
body:json {
{
"token": "",
"new_password": ""
}
}

View File

@ -0,0 +1,11 @@
meta {
name: Test Token
type: http
seq: 2
}
post {
url: {{baseUrl}}/api/v1/login/test-token
body: none
auth: none
}

View File

@ -0,0 +1,20 @@
meta {
name: Create Message
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/v1/messages/
body: json
auth: none
}
body:json {
{
"name": "",
"phone": "",
"email": "",
"message": ""
}
}

View File

@ -0,0 +1,15 @@
meta {
name: Delete Item
type: http
seq: 3
}
delete {
url: {{baseUrl}}/api/v1/messages/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,16 @@
meta {
name: Read Messages
type: http
seq: 2
}
get {
url: {{baseUrl}}/api/v1/messages/
body: none
auth: none
}
params:query {
~skip:
~limit:
}

View File

@ -0,0 +1,18 @@
meta {
name: Create Organ
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/v1/organ/
body: multipartForm
auth: none
}
body:multipart-form {
description:
title:
image:
index:
}

View File

@ -0,0 +1,15 @@
meta {
name: Delete Organ
type: http
seq: 4
}
delete {
url: {{baseUrl}}/api/v1/organ/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,22 @@
meta {
name: Edit Organ
type: http
seq: 3
}
put {
url: {{baseUrl}}/api/v1/organ/:id
body: multipartForm
auth: none
}
params:path {
id:
}
body:multipart-form {
description:
image:
title:
index:
}

View File

@ -0,0 +1,16 @@
meta {
name: Read Organ List
type: http
seq: 2
}
get {
url: {{baseUrl}}/api/v1/organ/
body: none
auth: none
}
params:query {
~skip:
~limit:
}

View File

@ -0,0 +1,21 @@
meta {
name: Create Schedule
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/v1/sechedule/
body: json
auth: none
}
body:json {
{
"title": "",
"info1": "",
"info2": "",
"date": "",
"course_id": ""
}
}

View File

@ -0,0 +1,15 @@
meta {
name: Delete Schedule
type: http
seq: 3
}
delete {
url: {{baseUrl}}/api/v1/sechedule/:id
body: none
auth: none
}
params:path {
id:
}

View File

@ -0,0 +1,24 @@
meta {
name: Edit Schedule
type: http
seq: 2
}
put {
url: {{baseUrl}}/api/v1/sechedule/:id
body: json
auth: none
}
params:path {
id:
}
body:json {
{
"title": "",
"info1": "",
"info2": "",
"date": ""
}
}

View File

@ -0,0 +1,11 @@
meta {
name: Read Setting
type: http
seq: 1
}
get {
url: {{baseUrl}}/api/v1/setting/
body: none
auth: none
}

View File

@ -0,0 +1,27 @@
meta {
name: Update Setting
type: http
seq: 2
}
put {
url: {{baseUrl}}/api/v1/setting/
body: json
auth: none
}
body:json {
{
"address": "",
"google_map_api_key": "",
"latitude": "",
"longitude": "",
"phone": "",
"email": "",
"facebook": "",
"instagram": "",
"youtube": "",
"youtube_link": "",
"whatsapp": ""
}
}

View File

@ -0,0 +1,21 @@
meta {
name: Create User
type: http
seq: 2
}
post {
url: {{baseUrl}}/api/v1/users/
body: json
auth: none
}
body:json {
{
"email": "",
"is_active": "",
"is_superuser": "",
"full_name": "",
"password": ""
}
}

View File

@ -0,0 +1,11 @@
meta {
name: Delete User Me
type: http
seq: 4
}
delete {
url: {{baseUrl}}/api/v1/users/me
body: none
auth: none
}

View File

@ -0,0 +1,15 @@
meta {
name: Delete User
type: http
seq: 10
}
delete {
url: {{baseUrl}}/api/v1/users/:user_id
body: none
auth: none
}
params:path {
user_id:
}

View File

@ -0,0 +1,15 @@
meta {
name: Read User By Id
type: http
seq: 8
}
get {
url: {{baseUrl}}/api/v1/users/:user_id
body: none
auth: none
}
params:path {
user_id:
}

View File

@ -0,0 +1,11 @@
meta {
name: Read User Me
type: http
seq: 3
}
get {
url: {{baseUrl}}/api/v1/users/me
body: none
auth: none
}

View File

@ -0,0 +1,16 @@
meta {
name: Read Users
type: http
seq: 1
}
get {
url: {{baseUrl}}/api/v1/users/
body: none
auth: none
}
params:query {
~skip:
~limit:
}

View File

@ -0,0 +1,19 @@
meta {
name: Register User
type: http
seq: 7
}
post {
url: {{baseUrl}}/api/v1/users/signup
body: json
auth: none
}
body:json {
{
"email": "",
"password": "",
"full_name": ""
}
}

View File

@ -0,0 +1,18 @@
meta {
name: Update Password Me
type: http
seq: 6
}
patch {
url: {{baseUrl}}/api/v1/users/me/password
body: json
auth: none
}
body:json {
{
"current_password": "",
"new_password": ""
}
}

View File

@ -0,0 +1,18 @@
meta {
name: Update User Me
type: http
seq: 5
}
patch {
url: {{baseUrl}}/api/v1/users/me
body: json
auth: none
}
body:json {
{
"full_name": "",
"email": ""
}
}

View File

@ -0,0 +1,25 @@
meta {
name: Update User
type: http
seq: 9
}
patch {
url: {{baseUrl}}/api/v1/users/:user_id
body: json
auth: none
}
params:path {
user_id:
}
body:json {
{
"email": "",
"is_active": "",
"is_superuser": "",
"full_name": "",
"password": ""
}
}

View File

@ -0,0 +1,15 @@
meta {
name: Test Email
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/v1/utils/test-email/
body: none
auth: none
}
params:query {
email_to:
}

3813
api.json Normal file

File diff suppressed because it is too large Load Diff

0
backend/24.3.1 Normal file
View File

0
backend/To Normal file
View File

View File

@ -0,0 +1,29 @@
"""added index in course
Revision ID: 55b5303d6c3c
Revises: e77992962f85
Create Date: 2025-01-21 13:13:39.309350
"""
from alembic import op
import sqlalchemy as sa
import sqlmodel.sql.sqltypes
# revision identifiers, used by Alembic.
revision = '55b5303d6c3c'
down_revision = 'e77992962f85'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('course', sa.Column('index', sa.Integer(), nullable=False))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('course', 'index')
# ### end Alembic commands ###

View File

@ -38,7 +38,7 @@ if settings.BACKEND_CORS_ORIGINS:
CORSMiddleware,
allow_origins=[
str(origin).strip("/") for origin in settings.BACKEND_CORS_ORIGINS
] + ["http://localhost:3000"]+["http://localhost:5173"]+["http://localhost:5173/aboutUs"]+["https://cms.oneandallmusic.net"]+["https://oneandallmusic.net"],
] + ["http://localhost:3000"]+["http://cms.localhost:3000"]+["http://localhost:5173"]+["http://localhost:5173/aboutUs"]+["https://cms.oneandallmusic.net"]+["https://oneandallmusic.net"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],

View File

@ -236,6 +236,7 @@ class CourseBase(SQLModel):
title: str = Field(max_length=255)
sort_description: str = Field(max_length=32768)
long_description: str = Field(max_length=32768)
index: int = Field(default=10)
information: str = Field(max_length=32768)
contant: str = Field(max_length=32768)
remark: str = Field(max_length=32768)
@ -264,6 +265,7 @@ class Course(CourseBase, table=True):
class CoursePublic(CourseBase):
id: uuid.UUID
title: str
index: int
images: list["Image"]
info_images: list["Info_Image"]
schedule: list["Schedule"]

28535
backend/get-pip.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,2 @@
VITE_API_URL=https://localhost
VITE_API_URL=http://localhost
VITE_IMAGE_URL=https://images.oneandallmusic.net

View File

@ -43,7 +43,7 @@ export type OpenAPIConfig = {
}
export const OpenAPI: OpenAPIConfig = {
BASE: "",
BASE: import.meta.env.VITE_API_URL || "",
CREDENTIALS: "include",
ENCODE_PATH: undefined,
HEADERS: undefined,
@ -54,4 +54,4 @@ export const OpenAPI: OpenAPIConfig = {
VERSION: "0.1.0",
WITH_CREDENTIALS: false,
interceptors: { request: new Interceptors(), response: new Interceptors() },
}
}

View File

@ -81,7 +81,8 @@ const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {
})
let url = config.BASE + path
url = url.replace(/^http:\/\//i, 'https://')
//url = url.replace(/^http:\/\//i, 'https://')
return options.query ? url + getQueryString(options.query) : url
}

View File

@ -206,6 +206,7 @@ export type CoursePublic = {
sort_description: string,
long_description: string,
information: string,
index: number,
contant: string,
remark: string,
id: string,
@ -216,6 +217,7 @@ export type CourseCreate = {
title: string,
sort_description: string,
long_description: string,
index: number,
information: string,
contant: string,
remark: string,
@ -225,6 +227,7 @@ export type CourseDetailsPublic = {
title: string,
sort_description: string,
long_description: string,
index: number,
information: string,
contant: string,
remark: string,
@ -239,6 +242,7 @@ export type CourseUpdate = {
title: string,
sort_description: string,
long_description: string,
index: number,
information: string,
contant: string,
remark: string,

View File

@ -7,7 +7,12 @@ import {
Textarea,
Container,
Heading,
Box
Box,
NumberInput,
NumberInputField,
NumberInputStepper,
NumberIncrementStepper,
NumberDecrementStepper,
} from "@chakra-ui/react"
import { useQueryClient, useMutation } from "@tanstack/react-query"
import { useEffect, useState } from "react"
@ -60,6 +65,7 @@ const CourseDetails = () => {
criteriaMode: "all",
defaultValues: {
title: courseDetails?.title,
index: courseDetails?.index,
sort_description: courseDetails?.sort_description,
long_description: courseDetails?.long_description,
remark: courseDetails?.remark,
@ -72,6 +78,7 @@ const CourseDetails = () => {
reset({}, { keepDirty: true });
if (courseDetails) {
setValue('title', courseDetails.title, { shouldDirty: true });
setValue('index', courseDetails.index, { shouldDirty: true });
setValue('sort_description', courseDetails.sort_description, { shouldDirty: true });
setValue('long_description', courseDetails.long_description, { shouldDirty: true });
setValue('remark', courseDetails.remark, { shouldDirty: true });
@ -161,6 +168,23 @@ const CourseDetails = () => {
)}
</FormControl>
<FormControl mt={4}></FormControl>
<FormControl isRequired isInvalid={!!errors.index}>
<FormLabel htmlFor="index">Index</FormLabel >
<NumberInput min={0} max={30} >
<NumberInputField {...register("index", {
required: "index is required.",
})} />
<NumberInputStepper>
<NumberIncrementStepper />
<NumberDecrementStepper />
</NumberInputStepper>
</NumberInput>
{errors.index && (
<FormErrorMessage>{errors.index.message}</FormErrorMessage>
)}
</FormControl>
<FormControl mt={4}></FormControl>
<FormControl >
<FormLabel htmlFor="sort_description">Short Description</FormLabel>
<Textarea

View File

@ -19,11 +19,11 @@ import { Route as LayoutImport } from './routes/_layout'
import { Route as LayoutIndexImport } from './routes/_layout/index'
import { Route as LayoutWebSettingImport } from './routes/_layout/webSetting'
import { Route as LayoutSettingsImport } from './routes/_layout/settings'
import { Route as LayoutOrganImport } from './routes/_layout/organ'
import { Route as LayoutItemsImport } from './routes/_layout/items'
import { Route as LayoutClientMessagesImport } from './routes/_layout/clientMessages'
import { Route as LayoutAdminImport } from './routes/_layout/admin'
import { Route as LayoutAboutUsImport } from './routes/_layout/aboutUs'
import { Route as LayoutOrganImport } from './routes/_layout/organ'
import { Route as LayoutCoursesCoursesImport } from './routes/_layout/Courses/Courses'
import { Route as LayoutCoursesAddCourseImport } from './routes/_layout/Courses/AddCourse'
import { Route as LayoutCoursesIdEditCourseImport } from './routes/_layout/Courses/$id.EditCourse'
@ -70,6 +70,11 @@ const LayoutSettingsRoute = LayoutSettingsImport.update({
getParentRoute: () => LayoutRoute,
} as any)
const LayoutOrganRoute = LayoutOrganImport.update({
path: '/organ',
getParentRoute: () => LayoutRoute,
} as any)
const LayoutItemsRoute = LayoutItemsImport.update({
path: '/items',
getParentRoute: () => LayoutRoute,
@ -90,11 +95,6 @@ const LayoutAboutUsRoute = LayoutAboutUsImport.update({
getParentRoute: () => LayoutRoute,
} as any)
const LayoutOrganRoute = LayoutOrganImport.update({
path: '/organ',
getParentRoute: () => LayoutRoute,
} as any)
const LayoutCoursesCoursesRoute = LayoutCoursesCoursesImport.update({
path: '/Courses/Courses',
getParentRoute: () => LayoutRoute,
@ -138,12 +138,6 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof LayoutAboutUsImport
parentRoute: typeof LayoutImport
}
'/_layout/organ': {
preLoaderRoute: typeof LayoutOrganImport
parentRoute: typeof LayoutImport
}
'/_layout/admin': {
preLoaderRoute: typeof LayoutAdminImport
parentRoute: typeof LayoutImport
@ -156,6 +150,10 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof LayoutItemsImport
parentRoute: typeof LayoutImport
}
'/_layout/organ': {
preLoaderRoute: typeof LayoutOrganImport
parentRoute: typeof LayoutImport
}
'/_layout/settings': {
preLoaderRoute: typeof LayoutSettingsImport
parentRoute: typeof LayoutImport
@ -188,10 +186,10 @@ declare module '@tanstack/react-router' {
export const routeTree = rootRoute.addChildren([
LayoutRoute.addChildren([
LayoutAboutUsRoute,
LayoutOrganRoute,
LayoutAdminRoute,
LayoutClientMessagesRoute,
LayoutItemsRoute,
LayoutOrganRoute,
LayoutSettingsRoute,
LayoutWebSettingRoute,
LayoutIndexRoute,

View File

@ -5,11 +5,16 @@ import {
FormLabel,
Input,
Textarea,
Container
Container,
NumberInput,
NumberInputField,
NumberInputStepper,
NumberIncrementStepper,
NumberDecrementStepper,
} from "@chakra-ui/react"
import {useQueryClient, useMutation } from "@tanstack/react-query"
import { useQueryClient, useMutation } from "@tanstack/react-query"
import { createFileRoute } from "@tanstack/react-router"
import {useState } from "react"
import { useState } from "react"
import useCustomToast from "../../../hooks/useCustomToast"
import { CoursesService, type ApiError, CourseCreate, } from "../../../client"
import { handleError } from "../../../utils"
@ -57,6 +62,7 @@ function AddCourseForms() {
criteriaMode: "all",
defaultValues: {
title: "",
index: 10,
sort_description: "",
long_description: "",
information: "",
@ -106,6 +112,23 @@ function AddCourseForms() {
)}
</FormControl>
<FormControl mt={4}></FormControl>
<FormControl isRequired isInvalid={!!errors.index}>
<FormLabel htmlFor="index">Index</FormLabel >
<NumberInput min={0} max={30} >
<NumberInputField {...register("index", {
required: "index is required.",
})} />
<NumberInputStepper>
<NumberIncrementStepper />
<NumberDecrementStepper />
</NumberInputStepper>
</NumberInput>
{errors.index && (
<FormErrorMessage>{errors.index.message}</FormErrorMessage>
)}
</FormControl>
<FormControl mt={4}></FormControl>
<FormControl >
<FormLabel htmlFor="sort_description">Short Description</FormLabel>
<Textarea
@ -128,7 +151,7 @@ function AddCourseForms() {
setlongDescription(draftToHtml(convertToRaw(newState.getCurrentContent())));
setValue("long_description", longDescription);
}}
toolbar={toolbar}
/>
</FormControl>