Rename info to infos

This commit is contained in:
Amit Jakubowicz 2019-10-06 11:30:10 +02:00
parent 6428021713
commit f492028736
20 changed files with 591 additions and 501 deletions

View File

@ -1,7 +1,15 @@
{
"README_schema" : "Specifies how to load the GraphQL schema that completion, error highlighting, and documentation is based on in the IDE",
"schema": {
"README_file" : "Remove 'file' to use request url below. A relative or absolute path to the JSON from a schema introspection query, e.g. '{ data: ... }' or a .graphql/.graphqls file describing the schema using GraphQL Schema Language. Changes to the file are watched.",
"file": "./server/src/schema.graphql"
}
}
{
"name": "Untitled GraphQL Schema",
"schemaPath": "schema.graphql",
"extensions": {
"endpoints": {
"Default GraphQL Endpoint": {
"url": "https://alpha.quepasaalpujarra.com/graphql",
"headers": {
"user-agent": "JS GraphQL"
},
"introspect": false
}
}
}
}

244
@types/graphql.d.ts vendored
View File

@ -1,6 +1,250 @@
// tslint:disable
// graphql typescript definitions
declare namespace GQL {
interface IGraphQLResponseRoot {
data?: IQuery | IMutation;
errors?: Array<IGraphQLResponseError>;
}
interface IGraphQLResponseError {
/** Required for all errors */
message: string;
locations?: Array<IGraphQLResponseErrorLocation>;
/** 7.2.2 says 'GraphQL servers may provide additional entries to error' */
[propName: string]: any;
}
interface IGraphQLResponseErrorLocation {
line: number;
column: number;
}
interface IQuery {
__typename: 'Query';
event: ICalendarEvent | null;
events: Array<ICalendarEvent | null> | null;
me: IUser | null;
occurrence: IEventOccurrence | null;
occurrences: Array<IEventOccurrence | null> | null;
}
interface IEventOnQueryArguments {
id: string;
}
interface IEventsOnQueryArguments {
filter: IEventsQueryFilter;
}
interface IOccurrenceOnQueryArguments {
id: string;
}
interface IOccurrencesOnQueryArguments {
filter: IOccurrencesQueryFilter;
}
interface ICalendarEvent {
__typename: 'CalendarEvent';
id: string;
info: IEventInformation | null;
infos: Array<IEventInformation | null>;
location: ILocation;
meta: IEventMeta | null;
occurrences: Array<IEventOccurrence | null> | null;
owner: IUser;
status: any;
time: IEventTime;
}
interface IInfoOnCalendarEventArguments {
lang: string;
}
interface IEventInformation {
__typename: 'EventInformation';
description: string | null;
language: string;
title: string;
}
interface ILocation {
__typename: 'Location';
address: string | null;
name: string | null;
}
interface IEventMeta {
__typename: 'EventMeta';
tags: Array<string | null>;
}
interface IEventOccurrence {
__typename: 'EventOccurrence';
end: string;
event: ICalendarEvent;
id: string;
start: string;
}
interface IUser {
__typename: 'User';
email: string;
events: Array<ICalendarEvent | null>;
id: string;
name: string;
roles: Array<IUserRole> | null;
username: string | null;
}
interface IUserRole {
__typename: 'UserRole';
type: any;
user: IUser;
}
interface IEventTime {
__typename: 'EventTime';
end: any | null;
exceptions: string | null;
recurrence: string | null;
start: any | null;
timeZone: any | null;
}
interface IEventsQueryFilter {
categories?: Array<any | null> | null;
from?: any | null;
limit?: number | null;
owner?: string | null;
to?: any | null;
}
interface IOccurrencesQueryFilter {
categories?: Array<any | null> | null;
from?: any | null;
limit?: number | null;
timeZone?: any | null;
to?: any | null;
}
interface IMutation {
__typename: 'Mutation';
createEvent: ICalendarEvent | null;
grantRole: IUser;
requestInvite: boolean;
revokeRole: IUser;
signin: IUserSession;
signup: Array<IError | null> | null;
updateEvent: ICalendarEvent | null;
}
interface ICreateEventOnMutationArguments {
input: ICreateEventInput;
}
interface IGrantRoleOnMutationArguments {
input: IGrantRoleInput;
}
interface IRequestInviteOnMutationArguments {
input: IRequestInviteInput;
}
interface IRevokeRoleOnMutationArguments {
input: IGrantRoleInput;
}
interface ISigninOnMutationArguments {
input: ISigninInput;
}
interface ISignupOnMutationArguments {
input: ISignupInput;
}
interface IUpdateEventOnMutationArguments {
input: IUpdateEventInput;
}
interface ICreateEventInput {
infos: Array<IEventInformationInput | null>;
location: IEventLocationInput;
meta: IEventMetaInput;
status: string;
time: IEventTimeInput;
}
interface IEventInformationInput {
description?: string | null;
language: string;
title: string;
}
interface IEventLocationInput {
address?: string | null;
name?: string | null;
}
interface IEventMetaInput {
tags: Array<string | null>;
}
interface IEventTimeInput {
end: any;
exceptions?: string | null;
recurrence?: string | null;
start: any;
timeZone: any;
}
interface IGrantRoleInput {
roleType: any;
userId: string;
}
interface IRequestInviteInput {
email: string;
}
interface ISigninInput {
hash: string;
}
interface IUserSession {
__typename: 'UserSession';
ctime: any;
hash: string;
isValid: boolean;
user: IUser;
}
interface ISignupInput {
email: string;
name: string;
username: string;
}
interface IError {
__typename: 'Error';
message: string;
path: string;
}
interface IUpdateEventInput {
id: string;
infos?: Array<IEventInformationInput> | null;
location?: IEventLocationInput | null;
meta?: IEventMetaInput | null;
status?: string | null;
time?: IEventTimeInput | null;
}
interface IRevokeRoleInput {
roleType: any;
userId: string;
}
}
// tslint:enable

216
@types/index.d.ts vendored
View File

@ -1,217 +1 @@
export type EventStatus = "confirmed" | "canceled"
// tslint:disable
// graphql typescript definitions
declare namespace GQL {
interface IGraphQLResponseRoot {
data?: IQuery | IMutation;
errors?: Array<IGraphQLResponseError>;
}
interface IGraphQLResponseError {
/** Required for all errors */
message: string;
locations?: Array<IGraphQLResponseErrorLocation>;
/** 7.2.2 says 'GraphQL servers may provide additional entries to error' */
[propName: string]: any;
}
interface IGraphQLResponseErrorLocation {
line: number;
column: number;
}
interface IQuery {
__typename: 'Query';
me: IUser | null;
event: ICalendarEvent | null;
events: Array<ICalendarEvent | null> | null;
occurrences: Array<IEventOccurrence | null> | null;
occurrence: IEventOccurrence | null;
}
interface IEventOnQueryArguments {
id: string;
}
interface IEventsOnQueryArguments {
filter: IEventsQueryFilter;
}
interface IOccurrencesOnQueryArguments {
filter: IOccurrencesQueryFilter;
}
interface IOccurrenceOnQueryArguments {
id: string;
}
interface IUser {
__typename: 'User';
name: string;
username: string;
email: string;
id: string;
events: Array<ICalendarEvent | null>;
}
interface ICalendarEvent {
__typename: 'CalendarEvent';
id: string;
owner: IUser;
info: Array<IEventInformation | null>;
time: IEventTime;
status: any;
location: ILocation;
occurrences: Array<IEventOccurrence | null> | null;
meta: IEventMeta | null;
}
interface IEventInformation {
__typename: 'EventInformation';
language: string;
title: string;
description: string | null;
}
interface IEventTime {
__typename: 'EventTime';
timeZone: any | null;
start: any | null;
end: any | null;
recurrence: string | null;
exceptions: string | null;
}
interface ILocation {
__typename: 'Location';
address: string | null;
name: string | null;
}
interface IEventOccurrence {
__typename: 'EventOccurrence';
id: string;
event: ICalendarEvent;
start: string;
end: string;
}
interface IEventMeta {
__typename: 'EventMeta';
tags: Array<string | null>;
}
interface IEventsQueryFilter {
owner?: string | null;
limit?: number | null;
from?: any | null;
to?: any | null;
categories?: Array<any | null> | null;
}
interface IOccurrencesQueryFilter {
from?: any | null;
to?: any | null;
timeZone?: any | null;
categories?: Array<any | null> | null;
limit?: number | null;
}
interface IMutation {
__typename: 'Mutation';
signup: Array<IError | null> | null;
signin: IUserSession;
requestInvite: boolean;
createEvent: ICalendarEvent | null;
updateEvent: ICalendarEvent | null;
}
interface ISignupOnMutationArguments {
input?: ISignupInput | null;
}
interface ISigninOnMutationArguments {
input?: ISigninInput | null;
}
interface IRequestInviteOnMutationArguments {
input?: IRequestInviteInput | null;
}
interface ICreateEventOnMutationArguments {
input: ICreateEventInput;
}
interface IUpdateEventOnMutationArguments {
input: IUpdateEventInput;
}
interface ISignupInput {
email: string;
username: string;
name: string;
}
interface IError {
__typename: 'Error';
path: string;
message: string;
}
interface ISigninInput {
hash: string;
}
interface IUserSession {
__typename: 'UserSession';
hash: string;
user: IUser;
ctime: any;
isValid: boolean;
}
interface IRequestInviteInput {
email: string;
}
interface ICreateEventInput {
time: IEventTimeInput;
info: Array<IEventInformationInput | null>;
location: IEventLocationInput;
meta: IEventMetaInput;
status: string;
}
interface IEventTimeInput {
timeZone: any;
start: any;
end: any;
recurrence?: string | null;
}
interface IEventInformationInput {
language: string;
title: string;
description?: string | null;
}
interface IEventLocationInput {
address?: string | null;
name?: string | null;
}
interface IEventMetaInput {
tags: Array<string | null>;
}
interface IUpdateEventInput {
id: string;
time?: IEventTimeInput | null;
info?: Array<IEventInformationInput> | null;
location?: IEventLocationInput | null;
meta?: IEventMetaInput | null;
status?: string | null;
}
}
// tslint:enable

View File

@ -1,7 +0,0 @@
{
"README_schema" : "Specifies how to load the GraphQL schema that completion, error highlighting, and documentation is based on in the IDE",
"schema": {
"README_file" : "Remove 'file' to use request url below. A relative or absolute path to the JSON from a schema introspection query, e.g. '{ data: ... }' or a .graphql/.graphqls file describing the schema using GraphQL Schema Language. Changes to the file are watched.",
"file": "./schema.graphql"
}
}

View File

@ -10,7 +10,8 @@
"ssr-build": "(cd packages/qpa-ssr; yarn build)",
"start": "NODE_ENV=development webpack-dev-server --config packages/qpa/webpack.config.ts --hot --progress",
"ssr": "API_URL=http://alpha.quepasaalpujarra.com/graphql ts-node packages/qpa-ssr/index.ts",
"release": "docker build -t eu.gcr.io/qpa-staging-237606/web:$TAG .; docker push eu.gcr.io/qpa-staging-237606/web:$TAG"
"release": "docker build -t eu.gcr.io/qpa-staging-237606/web:$TAG .; docker push eu.gcr.io/qpa-staging-237606/web:$TAG",
"codegen": "gql2ts ./schema.graphql -o ./@types/graphql.d.ts"
},
"workspaces": [
"packages/*"
@ -22,9 +23,9 @@
"jest": "^24.8.0",
"jest-cli": "^24.8.0",
"nodemon": "^1.19.1",
"qpa": "0.0.1",
"qpa-components": "0.0.1",
"qpa-message-center": "0.0.1",
"qpa": "0.0.1"
"qpa-message-center": "0.0.1"
},
"devDependencies": {
"@babel/cli": "^7.2.3",
@ -51,7 +52,9 @@
"apollo-link-context": "^1.0.14",
"babel-loader": "^8.0.5",
"babel-plugin-styled-components": "^1.10.0",
"gql2ts": "^1.10.1",
"html-webpack-plugin": "^3.2.0",
"prettier": "^1.18.2",
"react-hot-loader": "^4.8.2",
"ts-jest": "^24.0.0",
"ts-node": "^8.0.2",

View File

@ -32,7 +32,7 @@ const OccurrenceDetails = (props: Props) => {
const event = data.occurrence.event
const meIsOwner = me && me.id === event.owner.id
const info = data.occurrence.event.info[0]
const info = data.occurrence.event.infos[0]
return (
<Root>
<Title>

View File

@ -13,7 +13,7 @@ const query = gql`
id
name
}
info {
infos {
description
language
title
@ -34,7 +34,7 @@ export interface OccurrenceDetailsData {
id: string
name: string
}
info: Array<{
infos: Array<{
description
language
title

View File

@ -9,7 +9,7 @@ interface Props {
const CalendarOccurrence = (props: Props) => {
const event = props.occurrence.event
const localInfo = props.language
? event.info.find(info => info.language === props.language)
? event.infos.find(info => info.language === props.language)
: event.info[0]
return (<div>
{event.info[0].title}

View File

@ -18,7 +18,7 @@ const sanitizeEventName = (name: string) => {
const ListItem = (props: Props) => {
const {occurrence} = props
const {event} = occurrence
const info = event.info[0]
const info = event.infos[0]
const startTime = occurrence.start.split(" ")[1].substring(0, 5)
return (
<Root>

View File

@ -20,7 +20,7 @@ const CreateEvent = () => {
createEvent({
variables: {
input: {
info: values.info,
infos: values.infos,
location: values.location,
time: {
...values.time,

View File

@ -1,12 +1,11 @@
import { Mutation } from 'react-apollo'
import gql from 'graphql-tag'
import {GQL} from "../../../@types"
const mutation = gql`
mutation CreateEvent($input: CreateEventInput!) {
createEvent(input: $input) {
id
info {
infos {
description
language
title
@ -41,7 +40,7 @@ interface OccurrenceData {
}
interface Data {
id: string
info: InfoData[]
infos: InfoData[]
location: {
address: string
name: string

View File

@ -45,7 +45,7 @@ const EditEvent = (props: Props) => (
},
time: event.time,
location: event.location,
info: event.info,
infos: event.infos,
status: event.status,
}}/>
)

View File

@ -10,8 +10,8 @@ interface Props {
const Event = (props: Props) => {
// Get desired language or fallback to first language
const localInfo = props.language
? props.event.info.find(info => info.language === props.language)
: props.event.info[0]
? props.event.infos.find(info => info.language === props.language)
: props.event.infos[0]
return (
<div>

View File

@ -1,5 +1,4 @@
import addHours from "date-fns/add_hours"
import format from "date-fns/format"
import {addHours, format} from "date-fns"
import {Field, Form, Formik} from "formik"
import {Button} from "qpa-components"
import * as React from "react"
@ -8,32 +7,32 @@ import {EventStatus} from "../../../@types"
import DateTime from "./DateTime"
interface Props {
values?: EventFormData
onSubmit: (values: EventFormData) => void
loading: boolean
values?: EventFormData
onSubmit: (values: EventFormData) => void
loading: boolean
}
export interface EventFormData {
time: {
timeZone: string;
start: string;
end: string;
recurrence?: string;
exceptions?: string;
}
info: Array<{
language: string;
title: string;
description: string;
}>
location: {
address?: string;
name: string;
}
status: EventStatus
meta: {
tags: string[];
}
time: {
timeZone: string;
start: string;
end: string;
recurrence?: string;
exceptions?: string;
}
infos: Array<{
language: string;
title: string;
description: string;
}>
location: {
address?: string;
name: string;
}
status: EventStatus
meta: {
tags: string[];
}
}
class EventFormik extends Formik<EventFormData> {
@ -47,87 +46,93 @@ const nextWeekMidday = new Date(nextWeekTenAM)
nextWeekMidday.setUTCHours(12)
const EventForm = (props: Props) => {
const isEdit = !!props.values
return (
<EventFormik
onSubmit={props.onSubmit}
initialValues={
props.values
? props.values
: {
time: {
timeZone: "Europe/Madrid",
start: nextWeekTenAM.toISOString().substring(0, 16),
end: nextWeekMidday.toISOString().substring(0, 16),
},
info: [
{
language: "en",
title: "",
description: "",
},
],
location: {
name: "",
},
meta: {
tags: [],
},
status: "confirmed",
}
}
validate={(values) => {
const errors: any = {}
}}
>
{({isValid, setFieldValue}) => (
<StyledForm>
<p>Title</p>
<Field name="info[0].title">
{({field}) => <input {...field} placeholder="Name your event"/>}
</Field>
<p>Description</p>
<Field name="info[0].description">
{({field}) => (
<textarea
{...field}
placeholder="Write a few words about your event"
/>
)}
</Field>
<p>Start</p>
<Field name="time.start">
{
({field}) => (
<DateTime {...field} onChange={(newStartValue) => {
setFieldValue("time.start", newStartValue)
setFieldValue("time.end", format(addHours(newStartValue, 2), "YYYY-MM-DDTHH:MM"))
}}/>
)
const isEdit = !!props.values
return (
<EventFormik
onSubmit={props.onSubmit}
initialValues={
props.values
? props.values
: {
time: {
timeZone: "Europe/Madrid",
start: nextWeekTenAM.toISOString().substring(0, 16),
end: nextWeekMidday.toISOString().substring(0, 16),
},
infos: [
{
language: "en",
title: "",
description: "",
},
{
language: "es",
title: "",
description: ""
}
],
location: {
name: "",
},
meta: {
tags: [],
},
status: "confirmed",
}
}
</Field>
<p>End</p>
<Field name="time.end">
{
({field}) => (
<DateTime {...field} onChange={(newEndValue) => setFieldValue("time.end", newEndValue)}/>
)
}
</Field>
<p>Location</p>
<Field name="location.name">
{({field}) => <input {...field} placeholder="Location's name"/>}
</Field>
<p>Address</p>
<Field name="location.address">
{({field}) => <input {...field} placeholder="Address"/>}
</Field>
validate={(values) => {
const errors: any = {}
}}
>
{({isValid, setFieldValue}) => (
<StyledForm>
<p>Title</p>
<Field name="info[0].title">
{({field}) => <input {...field} placeholder="Name your event"/>}
</Field>
<p>Description</p>
<Field name="info[0].description">
{({field}) => (
<textarea
{...field}
placeholder="Write a few words about your event"
/>
)}
</Field>
<p>Start</p>
<Field name="time.start">
{
({field}) => (
<DateTime {...field} onChange={(newStartValue) => {
setFieldValue("time.start", newStartValue)
setFieldValue("time.end", format(addHours(newStartValue, 2), "YYYY-MM-DDTHH:MM"))
}}/>
)
}
</Field>
<p>End</p>
<Field name="time.end">
{
({field}) => (
<DateTime {...field}
onChange={(newEndValue) => setFieldValue("time.end", newEndValue)}/>
)
}
</Field>
<p>Location</p>
<Field name="location.name">
{({field}) => <input {...field} placeholder="Location's name"/>}
</Field>
<p>Address</p>
<Field name="location.address">
{({field}) => <input {...field} placeholder="Address"/>}
</Field>
<Button type="submit" loading={props.loading}>{isEdit ? "Edit" : "Create"}</Button>
</StyledForm>
)}
</EventFormik>
)
<Button type="submit" loading={props.loading}>{isEdit ? "Edit" : "Create"}</Button>
</StyledForm>
)}
</EventFormik>
)
}
const StyledForm = styled(Form)``
export default EventForm

View File

@ -6,7 +6,7 @@ const query = gql`
events(filter: $filter) {
id
status
info {
infos {
title
description
language
@ -28,7 +28,7 @@ interface Variables {
export interface EventData {
id: string
status: string
info: Array<{
infos: Array<{
title: string
description: string
language: string

View File

@ -5,7 +5,7 @@ import {EventStatus} from "../../../@types"
export const EventFragment = gql`
fragment EventData on CalendarEvent {
id
info {
infos {
description
language
title
@ -56,7 +56,7 @@ export interface EventMetaData {
export interface EventData {
id: string
info: EventInfoData[]
infos: EventInfoData[]
contact: ContactData[]
location: {
address: string

View File

@ -1,6 +1,5 @@
import {Query} from 'react-apollo'
import gql from 'graphql-tag'
import {GQL} from "../../../@types"
const query = gql`
query EventsQuery($filter: OccurrencesQueryFilter!) {
@ -14,7 +13,7 @@ const query = gql`
address
name
}
info {
infos {
language
title
}
@ -38,7 +37,7 @@ export interface OccurrenceData {
end: string
event: {
id: string
info: InfoData[]
infos: InfoData[]
location: {
address: string
name: string

View File

@ -1,54 +1,31 @@
type User {
name: String!
username: String
email: String!
id: ID!
events: [CalendarEvent]!
roles: [UserRole!]
# This file was generated based on ".graphqlconfig". Do not edit manually.
schema {
query: Query
mutation: Mutation
}
type UserRole {
user: User!
type: RoleType!
}
scalar Date
scalar RoleType
type UserSession {
hash: String!
user: User!
ctime: Date!
isValid: Boolean!
}
input SignupInput {
email: String!
username: String!
name: String!
}
input SigninInput {
hash: String!
}
input RequestInviteInput {
email: String!
}
# ------
# Events
# ------
type CalendarEvent {
id: ID!
owner: User!
info: [EventInformation]!
time: EventTime!
status: EventStatus!
info(lang: String!): EventInformation
infos: [EventInformation]!
location: Location!
occurrences: [EventOccurrence]
meta: EventMeta
occurrences: [EventOccurrence]
owner: User!
status: EventStatus!
time: EventTime!
}
type Error {
message: String!
path: String!
}
type EventInformation {
description: String
language: String!
title: String!
}
type EventMeta {
@ -56,10 +33,18 @@ type EventMeta {
}
type EventOccurrence {
id: ID!
event: CalendarEvent!
start: String!
end: String!
event: CalendarEvent!
id: ID!
start: String!
}
type EventTime {
end: Timestamp
exceptions: String
recurrence: String
start: Timestamp
timeZone: TimeZone
}
type Location {
@ -67,62 +52,57 @@ type Location {
name: String
}
type EventTime {
timeZone: TimeZone
start: Timestamp
end: Timestamp
recurrence: String
exceptions: String
type Mutation {
createEvent(input: CreateEventInput!): CalendarEvent
grantRole(input: GrantRoleInput!): User!
requestInvite(input: RequestInviteInput!): Boolean!
revokeRole(input: GrantRoleInput!): User!
signin(input: SigninInput!): UserSession!
signup(input: SignupInput!): [Error]
updateEvent(input: UpdateEventInput!): CalendarEvent
}
# in RFC3339 e.g. 2002-10-02T10:00:00-05:00 or 2002-10-02T15:00:00Z
scalar Timestamp
# IANA Timezone e.g. "Europe/Zurich"
scalar TimeZone
# "confirmed" | "tentative" | "cancelled"
scalar EventStatus
# e.g. 'de', 'en', etc'
scalar Language
# Event information for presentation
type EventInformation {
language: String!
title: String!
description: String
type Query {
event(id: ID!): CalendarEvent
events(filter: EventsQueryFilter!): [CalendarEvent]
me: User
occurrence(id: ID!): EventOccurrence
occurrences(filter: OccurrencesQueryFilter!): [EventOccurrence]
}
scalar Category
input EventsQueryFilter {
owner: ID
limit: Int
from: Timestamp
to: Timestamp
categories: [Category]
type User {
email: String!
events: [CalendarEvent]!
id: ID!
name: String!
roles: [UserRole!]
username: String
}
input OccurrencesQueryFilter {
from: Timestamp
to: Timestamp
timeZone: TimeZone
categories: [Category]
limit: Int
type UserRole {
type: RoleType!
user: User!
}
input EventTimeInput {
timeZone: TimeZone!
start: Timestamp!
end: Timestamp!
recurrence: String
type UserSession {
ctime: Date!
hash: String!
isValid: Boolean!
user: User!
}
input CreateEventInput {
infos: [EventInformationInput]!
location: EventLocationInput!
meta: EventMetaInput!
status: String!
time: EventTimeInput!
}
input EventInformationInput {
description: String
language: String!
title: String!
description: String
}
input EventLocationInput {
@ -134,67 +114,74 @@ input EventMetaInput {
tags: [String]!
}
input CreateEventInput {
time: EventTimeInput!
info: [EventInformationInput]!
location: EventLocationInput!
meta: EventMetaInput!
status: String!
input EventTimeInput {
end: Timestamp!
exceptions: String
recurrence: String
start: Timestamp!
timeZone: TimeZone!
}
input EventsQueryFilter {
categories: [Category]
from: Timestamp
limit: Int
owner: ID
to: Timestamp
}
input GrantRoleInput {
roleType: RoleType!
userId: ID!
}
input OccurrencesQueryFilter {
categories: [Category]
from: Timestamp
limit: Int
timeZone: TimeZone
to: Timestamp
}
input RequestInviteInput {
email: String!
}
input RevokeRoleInput {
roleType: RoleType!
userId: ID!
}
input SigninInput {
hash: String!
}
input SignupInput {
email: String!
name: String!
username: String!
}
input UpdateEventInput {
id: ID!
time: EventTimeInput
info: [EventInformationInput!]
infos: [EventInformationInput!]
location: EventLocationInput
meta: EventMetaInput
status: String
}
input GrantRoleInput {
userId: ID!
roleType: RoleType!
}
input RevokeRoleInput {
userId: ID!
roleType: RoleType!
}
input AcceptEventInput {
eventId: ID!,
accepted: Boolean!
comment: String
}
type Error {
path: String!
message: String!
}
type Mutation {
# Auth
signup(input: SignupInput!): [Error]
signin(input: SigninInput!): UserSession!
requestInvite(input: RequestInviteInput!): Boolean!
grantRole(input: GrantRoleInput!): User!
revokeRole(input: GrantRoleInput!): User!
# Event
createEvent(input: CreateEventInput!): CalendarEvent
updateEvent(input: UpdateEventInput!): CalendarEvent
acceptEvent(input: AcceptEventInput!): CalendarEvent
time: EventTimeInput
}
type Query {
# Auth
me: User
scalar TimeZone
# Event
event(id: ID!): CalendarEvent
events(filter: EventsQueryFilter!): [CalendarEvent]
occurrences(filter: OccurrencesQueryFilter!): [EventOccurrence]
occurrence(id: ID!): EventOccurrence
}
scalar Timestamp
scalar EventStatus
scalar RoleType
scalar Category
scalar Date
scalar Language

View File

@ -10,7 +10,7 @@
]
},
"include": [
"packages", "@types/index.d.ts"],
"packages", "@types/index.d.ts", "@types/graphql.d.ts"],
"exclude": [
".*/__tests__/.*", "node_modules", "dist", "lib", "__tests__"
]

View File

@ -933,6 +933,36 @@
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.3.tgz#dfa0c92efe44a1d1a7974fb49ffeb40ef2da5a27"
integrity sha512-zVgvPwGK7c1aVdUVc9Qv7SqepOGRDrqCw7KZPSZziWGxSlbII3gmvGLPzLX4d0n0BMbamBacUrN22zOMyFFEkQ==
"@gql2ts/from-query@^1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@gql2ts/from-query/-/from-query-1.9.0.tgz#ae92a4fa3df005df57eb835b371d7964644b9beb"
integrity sha512-hfH2Oq3ikHu+zKE4b9kdGbzEqFiX+VxIg0nhgpY5iUgl975cAtTFhAdwfzr/jKdZhC9Ad5dE1CPrjEA+G7hzMg==
dependencies:
"@gql2ts/language-typescript" "^1.9.0"
"@gql2ts/util" "^1.9.0"
"@gql2ts/from-schema@^1.10.1":
version "1.10.1"
resolved "https://registry.yarnpkg.com/@gql2ts/from-schema/-/from-schema-1.10.1.tgz#f8bb1f9525d5731163b16f5bcf300f87ef560273"
integrity sha512-atYXxY8WBBfK39fEbdwx3CgqRYYUR10a1hGPIwVcvEuNYIlAnIUR1drVbmC3higwMbAyHGkMxDPJ9Us7tnNz6w==
dependencies:
"@gql2ts/language-typescript" "^1.9.0"
"@gql2ts/util" "^1.9.0"
dedent "^0.7.0"
"@gql2ts/language-typescript@^1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@gql2ts/language-typescript/-/language-typescript-1.9.0.tgz#c521e800817d1341552e9c684bca6b64b0abb46f"
integrity sha512-d3OlIFMjKoXH+VukXD7+pQRLgrP3NkXDQbCWSGonIl5mpRQ5aO5I8Fo53cMZQ9xCjj1Y5Vg24wtZOuY8spc6Ag==
dependencies:
"@gql2ts/util" "^1.9.0"
humps "^2.0.0"
"@gql2ts/util@^1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@gql2ts/util/-/util-1.9.0.tgz#d07a54832757d2f2d1fc9891e5b0e3e3b4886c6a"
integrity sha512-mkHar7AdyShUFJE6Mlke1tUbb+lPCK1EozZeAhCuRrhQ5aCCBAG6RxzNUYX1Q2jeGeyU0WRAtQu1oE/GoIsNXA==
"@jest/console@^24.7.1":
version "24.7.1"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545"
@ -2684,6 +2714,11 @@ commander@^2.12.1, commander@^2.20.0, commander@^2.8.1, commander@~2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
commander@^2.9.0:
version "2.20.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.1.tgz#3863ce3ca92d0831dcf2a102f5fb4b5926afd0f9"
integrity sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==
commander@~2.19.0:
version "2.19.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
@ -3086,6 +3121,11 @@ decode-uri-component@^0.2.0:
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
dedent@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
deep-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@ -4098,6 +4138,17 @@ got@^6.7.1:
unzip-response "^2.0.1"
url-parse-lax "^1.0.0"
gql2ts@^1.10.1:
version "1.10.1"
resolved "https://registry.yarnpkg.com/gql2ts/-/gql2ts-1.10.1.tgz#aae1a1312744f7c9b36abf78437413ea317f6a71"
integrity sha512-Kwa1Db1e3qGediBi1A5wX98UBKmvUklsQgfLwk7J8bj9RQ4AkAwTToFvUmKhflKTZndAtQbdOJWwm5cmgXsLYA==
dependencies:
"@gql2ts/from-query" "^1.9.0"
"@gql2ts/from-schema" "^1.10.1"
"@gql2ts/util" "^1.9.0"
commander "^2.9.0"
graphql ">= 0.10 <15"
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
version "4.2.0"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b"
@ -4119,6 +4170,13 @@ graphql-tools@^4.0.3:
iterall "^1.1.3"
uuid "^3.1.0"
"graphql@>= 0.10 <15":
version "14.5.8"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.5.8.tgz#504f3d3114cb9a0a3f359bbbcf38d9e5bf6a6b3c"
integrity sha512-MMwmi0zlVLQKLdGiMfWkgQD7dY/TUKt4L+zgJ/aR0Howebod3aNgP5JkgvAULiR2HPVZaP2VEElqtdidHweLkg==
dependencies:
iterall "^1.2.2"
graphql@^14.0.2:
version "14.4.2"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.4.2.tgz#553a7d546d524663eda49ed6df77577be3203ae3"
@ -4444,6 +4502,11 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
humps@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa"
integrity sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao=
iconv-lite@0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@ -6646,6 +6709,11 @@ prepend-http@^1.0.1:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
prettier@^1.18.2:
version "1.18.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==
pretty-error@^2.0.2:
version "2.1.1"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"