Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ Orbit ships with a comprehensive set of management tools out of the box:
| **Documentation** | Host your group's docs natively inside Orbit |
| **Policies** | Create and assign policy documents for members to review and sign |
| **Sessions** | Schedule and host sessions with minimal overhead |
| **Forms** | Build custom forms, manage submissions, and track analytics from a single dashboard. |

---

Expand Down
8 changes: 1 addition & 7 deletions components/settings/general/form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,8 @@ const Forms: FC<props> = (props) => {
<p className="text-xs text-zinc-500 dark:text-zinc-400">Create, customize, and manage workspace forms for collecting structured data, submissions, and user input across your workspace (<strong>Coming Soon</strong>)</p>
</div>
</div>
{/*<SwitchComponenet
checked={workspace.settings?.policiesEnabled}
label=""
classoverride="mt-0"
/>*/}
<SwitchComponenet
checked={false}
disabled
checked={workspace.settings?.policiesEnabled}
label=""
classoverride="mt-0"
/>
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

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

4 changes: 4 additions & 0 deletions pages/api/workspace/[id]/forms/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Forms API
> Designed by BuddyWinte with the assistance of Pawesome Contributers

database done?
212 changes: 107 additions & 105 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ model workspace {
policyLinks PolicyShareableLink[]
stickyAnnouncements StickyAnnouncement[]
staffResignations staffResignation[]
forms form[]
forms Form[]
}

model config {
Expand Down Expand Up @@ -101,7 +101,9 @@ model user {
quotaCustomCompletions QuotaCustomCompletion[] @relation("QuotaCompletionUser")
quotaCompletionsReviewed QuotaCustomCompletion[] @relation("QuotaCompletionReviewer")
quotaUsers QuotaUser[]
forms form[]
createdForms Form[]
formResponses FormResponse[]
formReviews FormReview[]
}

model AuthSession {
Expand Down Expand Up @@ -742,120 +744,120 @@ model PolicyShareableLink {
@@index([createdById])
}

model form {
id String @id @default(uuid()) @db.Uuid
model Form {
id String @id @default(uuid()) @db.Uuid
workspaceGroupId Int
createdById BigInt
name String
description String?
isEnabled Boolean
settings Json
visibility Json?
createdById BigInt
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
workspace workspace @relation(fields: [workspaceGroupId], references: [groupId])
createdBy user @relation(fields: [createdById], references: [userid])
questions formQuestion[]
submissions formSubmission[]
auditLogs formAuditLog[]
slug String?
enabled Boolean @default(true)
archived Boolean @default(false)
settings Json //"allowAnonymous": false, "allowMutiple": false, "successMessage": null
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
workspace workspace @relation(fields: [workspaceGroupId], references: [groupId])
createdBy user @relation(fields: [createdById], references: [userid])
formPages FormPage[]
formResponses FormResponse[]

@@unique([workspaceGroupId, slug])
@@index([workspaceGroupId])
}

model formQuestion {
id String @id @default(uuid()) @db.Uuid
formId String @db.Uuid
title String
description String?
type String
required Boolean @default(false)
position Int
settings Json?
visibilityRules Json?
createdAt DateTime @default(now())
updatedat DateTime @updatedAt
form form @relation(fields: [formId], references: [id], onDelete: Cascade)
answers formAnswer[]
model FormPage {
id String @id @default(uuid()) @db.Uuid
formId String @db.Uuid
name String
description String?
order Int
form Form @relation(fields: [formId], references: [id], onDelete: Cascade)
questions FormQuestion[]

@@index([formId])
}

model formSubmission {
id String @id @default(uuid()) @db.Uuid
formId String @db.Uuid
workspaceGroupId Int
userId BigInt?
robloxUserId BigInt?
discordUserId String?
status String @default("SUBMITTED")
metadata Json?
submittedAt DateTime @default(now())
updatedAt DateTime @updatedAt
form form @relation(fields: [formId], references: [id], onDelete: Cascade)
answers formAnswer[]
reviews formReview[]
comments formComment[]
auditLogs formAuditLog[]
enum FormQuestionType {
SHORT_TEXT
LONG_TEXT
NUMBER
BOOLEAN
DATE
TIME
DATETIME
EMAIL
URL
SINGLE_CHOICE
MULTIPLE_CHOICE
ROBLOX_USER
DISCORD_USER
}

model FormQuestion {
id String @id @default(uuid()) @db.Uuid
pageId String @db.Uuid
label String
description String?
type FormQuestionType
required Boolean @default(false)
placeholder String?
order Int
settings Json?
createdAt DateTime @default(now())
page FormPage @relation(fields: [pageId], references: [id], onDelete: Cascade)
answers FormAnswer[]

@@index([pageId])
}

enum FormResponseStatus {
PENDING
IN_REVIEW
APPROVED
DENIED
WITHDRAWN
}

model FormResponse {
id String @id @default(uuid()) @db.Uuid
formId String @db.Uuid
submuttedById BigInt?
status FormResponseStatus @default(PENDING)
submittedAt DateTime @default(now())
updatedAt DateTime @updatedAt
form Form @relation(fields: [formId], references: [id], onDelete: Cascade)
submittedBy user? @relation(fields: [submuttedById], references: [userid])
answers FormAnswer[]
reviews FormReview[]

@@index([formId])
@@index([workspaceGroupId])
@@index([status])
}

model formAnswer {
id String @id @default(uuid()) @db.Uuid
submissionId String @db.Uuid
questionId String @db.Uuid
value Json
createdAt DateTime @default(now())
submission formSubmission @relation(fields: [submissionId], references: [id], onDelete: Cascade)
question formQuestion @relation(fields: [questionId], references: [id], onDelete: Cascade)

@@index([submissionId])
@@index([questionId])
}

model formReview {
id String @id @default(uuid()) @db.Uuid
submissionId String @db.Uuid
reviewerId BigInt
vote String?
score Int?
notes String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
submission formSubmission @relation(fields: [submissionId], references: [id], onDelete: Cascade)

@@index([submissionId])
@@index([reviewerId])
}

model formComment {
id String @id @default(uuid()) @db.Uuid
submissionId String @db.Uuid
authorId BigInt
content String
internal Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
submission formSubmission @relation(fields: [submissionId], references: [id], onDelete: Cascade)

@@index([submissionId])
}

model formAuditLog {
id String @id @default(uuid()) @db.Uuid
workspaceGroupId Int?
formId String? @db.Uuid
submissionId String? @db.Uuid
actorId BigInt?
action String
details Json?
createdAt DateTime @default(now())
form form? @relation(fields: [formId], references: [id])
submission formSubmission? @relation(fields: [submissionId], references: [id])
@@index([submuttedById])
}

@@index([formId])
@@index([submissionId])
@@index([workspaceGroupId])
}
model FormAnswer {
id String @id @default(uuid()) @db.Uuid
questionId String @db.Uuid
responseId String @db.Uuid
value Json
response FormResponse @relation(fields: [responseId], references: [id], onDelete: Cascade)
question FormQuestion @relation(fields: [questionId], references: [id], onDelete: Cascade)

@@unique([responseId, questionId])
}

enum FormReviewDecision {
APPROVED
DENIED
COMMENT
}

model FormReview {
id String @id @default(uuid()) @db.Uuid
responseId String @db.Uuid
reviewerId BigInt
decision FormReviewDecision
comment String?
createdAt DateTime @default(now())
response FormResponse @relation(fields: [responseId], references: [id], onDelete: Cascade)
reviewer user @relation(fields: [reviewerId], references: [userid])
}
Loading