Dwayne Harris
4 years ago
142 changed files with 1382 additions and 3053 deletions
-
9config/config.json
-
9config/dev.json
-
9config/prod.json
-
2715package-lock.json
-
40package.json
-
15postcss-normalize.d.ts
-
21postcss-preset-env.d.ts
-
14src/actions/config.ts
-
20src/app/actions/apps.ts
-
16src/app/actions/authentication.ts
-
10src/app/actions/composer.ts
-
0src/app/actions/entities.ts
-
0src/app/actions/forms.ts
-
18src/app/actions/groups.ts
-
2src/app/actions/lists.ts
-
0src/app/actions/notifications.ts
-
18src/app/actions/posts.ts
-
10src/app/actions/registration.ts
-
9src/app/actions/requests.ts
-
0src/app/actions/theme.ts
-
10src/app/actions/users.ts
-
6src/app/api/errors.ts
-
14src/app/api/fetch.ts
-
0src/app/api/index.ts
-
0src/app/app.tsx
-
7src/app/components/app-list-item.tsx
-
20src/app/components/app.tsx
-
21src/app/components/composer.tsx
-
0src/app/components/controls/button.tsx
-
8src/app/components/controls/checkbox-field.tsx
-
5src/app/components/controls/cover-image-field.tsx
-
2src/app/components/controls/field-label.tsx
-
32src/app/components/controls/file-field.tsx
-
5src/app/components/controls/icon-image-field.tsx
-
5src/app/components/controls/image-field.tsx
-
12src/app/components/controls/password-field.tsx
-
4src/app/components/controls/primary-button.tsx
-
4src/app/components/controls/secondary-button.tsx
-
12src/app/components/controls/select-field.tsx
-
4src/app/components/controls/static-field.tsx
-
14src/app/components/controls/text-field.tsx
-
12src/app/components/controls/textarea-field.tsx
-
17src/app/components/controls/theme-field.tsx
-
18src/app/components/create-group-form.tsx
-
20src/app/components/create-group-step.tsx
-
20src/app/components/create-user-form.tsx
-
18src/app/components/create-user-step.tsx
-
2src/app/components/footer.tsx
-
4src/app/components/form-notification.tsx
-
18src/app/components/group-invitations.tsx
-
7src/app/components/group-list-item.tsx
-
8src/app/components/group-logs.tsx
-
2src/app/components/help-text.tsx
-
2src/app/components/horizontal-rule.tsx
-
4src/app/components/level.tsx
-
2src/app/components/logo.tsx
-
4src/app/components/member-list-item.tsx
-
8src/app/components/member-list.tsx
-
8src/app/components/navigation-menu.tsx
-
4src/app/components/notification-container.tsx
-
4src/app/components/notification.tsx
-
10src/app/components/pages/about.tsx
-
28src/app/components/pages/admin-apps.tsx
-
26src/app/components/pages/admin-groups.tsx
-
16src/app/components/pages/admin.tsx
-
20src/app/components/pages/apps.tsx
-
38src/app/components/pages/create-app.tsx
-
18src/app/components/pages/developers.tsx
-
48src/app/components/pages/edit-app.tsx
-
50src/app/components/pages/group-admin.tsx
-
20src/app/components/pages/groups.tsx
-
20src/app/components/pages/home.tsx
-
6src/app/components/pages/loading.tsx
-
26src/app/components/pages/login.tsx
-
40src/app/components/pages/register-group.tsx
-
28src/app/components/pages/register.tsx
-
50src/app/components/pages/self.tsx
-
48src/app/components/pages/view-app.tsx
-
47src/app/components/pages/view-group.tsx
-
28src/app/components/pages/view-post.tsx
-
51src/app/components/pages/view-user.tsx
-
8src/app/components/post-list.tsx
-
10src/app/components/post.tsx
-
2src/app/components/progress.tsx
-
2src/app/components/search.tsx
-
2src/app/components/section.tsx
-
15src/app/components/self-info.tsx
-
2src/app/components/spinner.tsx
-
2src/app/components/subtitle.tsx
-
12src/app/components/timeline.tsx
-
2src/app/components/title.tsx
-
2src/app/components/user-apps.tsx
-
13src/app/components/user.tsx
-
17src/app/constants/index.ts
-
7src/app/hooks/index.ts
-
0src/app/images/caret-down.svg
-
BINsrc/app/images/favicon-16x16.png
-
BINsrc/app/images/favicon-32x32.png
-
BINsrc/app/images/favicon.ico
-
2src/app/index.ejs
@ -1,9 +0,0 @@ |
|||||
{ |
|
||||
"apiUrl": "http://localhost:5000", |
|
||||
"blobUrl": "https://flexordev.blob.core.windows.net/media/", |
|
||||
"media": { |
|
||||
"defaultMaxSize": 5242880, |
|
||||
"coverMaxSize": 5242880, |
|
||||
"iconMaxSize": 1048576 |
|
||||
} |
|
||||
} |
|
@ -1,9 +0,0 @@ |
|||||
{ |
|
||||
"apiUrl": "http://api-dev.flexor.cc", |
|
||||
"blobUrl": "https://flexordev.blob.core.windows.net/media/", |
|
||||
"media": { |
|
||||
"defaultMaxSize": 5242880, |
|
||||
"coverMaxSize": 5242880, |
|
||||
"iconMaxSize": 1048576 |
|
||||
} |
|
||||
} |
|
@ -1,9 +0,0 @@ |
|||||
{ |
|
||||
"apiUrl": "https://api.flexor.cc", |
|
||||
"blobUrl": "https://flexordev.blob.core.windows.net/media/", |
|
||||
"media": { |
|
||||
"defaultMaxSize": 5242880, |
|
||||
"coverMaxSize": 5242880, |
|
||||
"iconMaxSize": 1048576 |
|
||||
} |
|
||||
} |
|
2715
package-lock.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,15 +0,0 @@ |
|||||
declare module 'postcss-normalize' { |
|
||||
import { |
|
||||
plugin, Plugin, ParserInput, |
|
||||
Result, LazyResult, Root, ProcessOptions |
|
||||
} from 'postcss' |
|
||||
|
|
||||
interface PluginOptions { |
|
||||
allowDuplicates?: boolean |
|
||||
forceImport?: string | boolean |
|
||||
browsers?: string |
|
||||
} |
|
||||
|
|
||||
const PostcssNormalize: Plugin<PluginOptions> |
|
||||
export default PostcssNormalize |
|
||||
} |
|
@ -1,21 +0,0 @@ |
|||||
declare module 'postcss-preset-env' { |
|
||||
import { |
|
||||
plugin, Plugin, ParserInput, |
|
||||
Result, LazyResult, Root, ProcessOptions |
|
||||
} from 'postcss' |
|
||||
|
|
||||
interface PluginOptions { |
|
||||
stage?: number |
|
||||
features?: any |
|
||||
browsers?: string |
|
||||
insertBefore?: any |
|
||||
insertAfter?: any |
|
||||
autoprefixer?: any |
|
||||
preserve?: boolean |
|
||||
importFrom?: string |
|
||||
exportTo?: string |
|
||||
} |
|
||||
|
|
||||
const PostcssPresetEnv: Plugin<PluginOptions> |
|
||||
export default PostcssPresetEnv |
|
||||
} |
|
@ -1,14 +0,0 @@ |
|||||
import { Action } from 'redux' |
|
||||
import { Config } from 'src/types' |
|
||||
|
|
||||
export interface SetConfigAction extends Action { |
|
||||
type: 'CONFIG_SET' |
|
||||
payload: Config |
|
||||
} |
|
||||
|
|
||||
export type ConfigActions = SetConfigAction |
|
||||
|
|
||||
export const setConfig = (config: Config): SetConfigAction => ({ |
|
||||
type: 'CONFIG_SET', |
|
||||
payload: config |
|
||||
}) |
|
@ -1,13 +1,13 @@ |
|||||
import { apiFetch } from 'src/api' |
|
||||
import { setEntities } from 'src/actions/entities' |
|
||||
import { startRequest, finishRequest } from 'src/actions/requests' |
|
||||
import { setFieldNotification } from 'src/actions/forms' |
|
||||
import { listSet, listAppend } from 'src/actions/lists' |
|
||||
import { objectToQuerystring } from 'src/utils' |
|
||||
import { normalize } from 'src/utils/normalization' |
|
||||
import { EntityListKey, Entity } from 'src/types' |
|
||||
|
|
||||
import { AppThunkAction, RequestKey, EntityType, App, AvailabilityResponse, NotificationType }from 'src/types' |
|
||||
|
import { apiFetch } from '../api' |
||||
|
import { setEntities } from '../actions/entities' |
||||
|
import { startRequest, finishRequest } from '../actions/requests' |
||||
|
import { setFieldNotification } from '../actions/forms' |
||||
|
import { listSet, listAppend } from '../actions/lists' |
||||
|
import { objectToQuerystring } from '../utils' |
||||
|
import { normalize } from '../utils/normalization' |
||||
|
import { EntityListKey, Entity } from '../types' |
||||
|
|
||||
|
import { AppThunkAction, RequestKey, EntityType, App, AvailabilityResponse, NotificationType }from '../types' |
||||
|
|
||||
interface AppsResponse { |
interface AppsResponse { |
||||
apps: App[] |
apps: App[] |
@ -1,10 +1,10 @@ |
|||||
import { Action } from 'redux' |
import { Action } from 'redux' |
||||
|
|
||||
import { setEntities } from 'src/actions/entities' |
|
||||
import { startRequest, finishRequest } from 'src/actions/requests' |
|
||||
import { apiFetch } from 'src/api' |
|
||||
import { normalize } from 'src/utils/normalization' |
|
||||
import { AppThunkAction, Installation, RequestKey, EntityType, Settings } from 'src/types' |
|
||||
|
import { setEntities } from '../actions/entities' |
||||
|
import { startRequest, finishRequest } from '../actions/requests' |
||||
|
import { apiFetch } from '../api' |
||||
|
import { normalize } from '../utils/normalization' |
||||
|
import { AppThunkAction, Installation, RequestKey, EntityType, Settings } from '../types' |
||||
|
|
||||
export interface SetInstallationsAction extends Action { |
export interface SetInstallationsAction extends Action { |
||||
type: 'COMPOSER_SET_INSTALLATIONS' |
type: 'COMPOSER_SET_INSTALLATIONS' |
@ -1,13 +1,11 @@ |
|||||
import { Action } from 'redux' |
|
||||
|
|
||||
import { apiFetch } from 'src/api' |
|
||||
import { setEntities } from 'src/actions/entities' |
|
||||
import { listSet, listAppend } from 'src/actions/lists' |
|
||||
import { startRequest, finishRequest } from 'src/actions/requests' |
|
||||
|
|
||||
import { objectToQuerystring } from 'src/utils' |
|
||||
import { normalize } from 'src/utils/normalization' |
|
||||
import { AppThunkAction, Entity, RequestKey, EntityType, User, EntityListKey } from 'src/types' |
|
||||
|
import { apiFetch } from '../api' |
||||
|
import { setEntities } from '../actions/entities' |
||||
|
import { listSet, listAppend } from '../actions/lists' |
||||
|
import { startRequest, finishRequest } from '../actions/requests' |
||||
|
|
||||
|
import { objectToQuerystring } from '../utils' |
||||
|
import { normalize } from '../utils/normalization' |
||||
|
import { AppThunkAction, Entity, RequestKey, EntityType, User, EntityListKey } from '../types' |
||||
|
|
||||
export const fetchGroup = (id: string): AppThunkAction => { |
export const fetchGroup = (id: string): AppThunkAction => { |
||||
return async dispatch => { |
return async dispatch => { |
@ -1,5 +1,5 @@ |
|||||
import { Action } from 'redux' |
import { Action } from 'redux' |
||||
import { EntityListKey } from 'src/types' |
|
||||
|
import { EntityListKey } from '../types' |
||||
|
|
||||
export interface ListAppendAction extends Action { |
export interface ListAppendAction extends Action { |
||||
type: 'LISTS_APPEND' |
type: 'LISTS_APPEND' |
@ -1,13 +1,11 @@ |
|||||
import { Action } from 'redux' |
|
||||
|
|
||||
import { apiFetch } from 'src/api' |
|
||||
import { setEntities } from 'src/actions/entities' |
|
||||
import { listSet, listAppend } from 'src/actions/lists' |
|
||||
import { startRequest, finishRequest } from 'src/actions/requests' |
|
||||
|
|
||||
import { objectToQuerystring } from 'src/utils' |
|
||||
import { normalize } from 'src/utils/normalization' |
|
||||
import { AppThunkAction, Entity, RequestKey, EntityType, User, Post, Attachment, EntityListKey } from 'src/types' |
|
||||
|
import { apiFetch } from '../api' |
||||
|
import { setEntities } from '../actions/entities' |
||||
|
import { listSet, listAppend } from '../actions/lists' |
||||
|
import { startRequest, finishRequest } from '../actions/requests' |
||||
|
|
||||
|
import { objectToQuerystring } from '../utils' |
||||
|
import { normalize } from '../utils/normalization' |
||||
|
import { AppThunkAction, Entity, RequestKey, EntityType, User, Post, Attachment, EntityListKey } from '../types' |
||||
|
|
||||
interface CreatePostResponse { |
interface CreatePostResponse { |
||||
id: string |
id: string |
@ -1,15 +1,15 @@ |
|||||
import { Action } from 'redux' |
import { Action } from 'redux' |
||||
|
|
||||
import { apiFetch } from 'src/api' |
|
||||
import { setFieldNotification } from 'src/actions/forms' |
|
||||
import { startRequest, finishRequest } from 'src/actions/requests' |
|
||||
|
import { apiFetch } from '../api' |
||||
|
import { setFieldNotification } from '../actions/forms' |
||||
|
import { startRequest, finishRequest } from '../actions/requests' |
||||
|
|
||||
import { |
import { |
||||
LOCAL_STORAGE_ACCESS_TOKEN_KEY, |
LOCAL_STORAGE_ACCESS_TOKEN_KEY, |
||||
LOCAL_STORAGE_REFRESH_TOKEN_KEY, |
LOCAL_STORAGE_REFRESH_TOKEN_KEY, |
||||
} from 'src/constants' |
|
||||
|
} from '../constants' |
||||
|
|
||||
import { AppThunkAction, NotificationType, RequestKey, AvailabilityResponse } from 'src/types' |
|
||||
|
import { AppThunkAction, NotificationType, RequestKey, AvailabilityResponse } from '../types' |
||||
|
|
||||
export interface SetStepAction extends Action { |
export interface SetStepAction extends Action { |
||||
type: 'REGISTRATION_SET_STEP' |
type: 'REGISTRATION_SET_STEP' |
@ -1,30 +1,31 @@ |
|||||
import { Action } from 'redux' |
import { Action } from 'redux' |
||||
|
import { RequestKey } from '../types' |
||||
|
|
||||
export interface StartRequestAction extends Action { |
export interface StartRequestAction extends Action { |
||||
type: 'REQUESTS_START_REQUEST' |
type: 'REQUESTS_START_REQUEST' |
||||
payload: { |
payload: { |
||||
id: string |
|
||||
|
id: RequestKey |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
export interface FinishRequestAction extends Action { |
export interface FinishRequestAction extends Action { |
||||
type: 'REQUESTS_FINISH_REQUEST' |
type: 'REQUESTS_FINISH_REQUEST' |
||||
payload: { |
payload: { |
||||
id: string |
|
||||
|
id: RequestKey |
||||
succeeded: boolean |
succeeded: boolean |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
export type RequestsActions = StartRequestAction | FinishRequestAction |
export type RequestsActions = StartRequestAction | FinishRequestAction |
||||
|
|
||||
export const startRequest = (id: string): StartRequestAction => ({ |
|
||||
|
export const startRequest = (id: RequestKey): StartRequestAction => ({ |
||||
type: 'REQUESTS_START_REQUEST', |
type: 'REQUESTS_START_REQUEST', |
||||
payload: { |
payload: { |
||||
id, |
id, |
||||
}, |
}, |
||||
}) |
}) |
||||
|
|
||||
export const finishRequest = (id: string, succeeded: boolean): FinishRequestAction => ({ |
|
||||
|
export const finishRequest = (id: RequestKey, succeeded: boolean): FinishRequestAction => ({ |
||||
type: 'REQUESTS_FINISH_REQUEST', |
type: 'REQUESTS_FINISH_REQUEST', |
||||
payload: { |
payload: { |
||||
id, |
id, |
@ -1,8 +1,8 @@ |
|||||
import { apiFetch } from 'src/api' |
|
||||
import { setEntities } from 'src/actions/entities' |
|
||||
import { startRequest, finishRequest } from 'src/actions/requests' |
|
||||
import { AppThunkAction, Entity, RequestKey, EntityType } from 'src/types' |
|
||||
import { normalize } from 'src/utils/normalization' |
|
||||
|
import { apiFetch } from '../api' |
||||
|
import { setEntities } from '../actions/entities' |
||||
|
import { startRequest, finishRequest } from '../actions/requests' |
||||
|
import { AppThunkAction, Entity, RequestKey, EntityType } from '../types' |
||||
|
import { normalize } from '../utils/normalization' |
||||
|
|
||||
export const fetchUser = (id: string): AppThunkAction => { |
export const fetchUser = (id: string): AppThunkAction => { |
||||
return async dispatch => { |
return async dispatch => { |
@ -1,8 +1,8 @@ |
|||||
import { History } from 'history' |
import { History } from 'history' |
||||
|
|
||||
import { setFieldNotification } from 'src/actions/forms' |
|
||||
import { showNotification } from 'src/actions/notifications' |
|
||||
import { AppThunkDispatch, FormNotification, NotificationType } from 'src/types' |
|
||||
|
import { setFieldNotification } from '../actions/forms' |
||||
|
import { showNotification } from '../actions/notifications' |
||||
|
import { AppThunkDispatch, FormNotification, NotificationType } from '../types' |
||||
|
|
||||
export function handleApiError(err: HttpError, dispatch: AppThunkDispatch, history?: History) { |
export function handleApiError(err: HttpError, dispatch: AppThunkDispatch, history?: History) { |
||||
console.error('Error:', err) |
console.error('Error:', err) |
@ -1,9 +1,9 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useSelector, useDispatch } from 'react-redux' |
import { useSelector, useDispatch } from 'react-redux' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import { setFieldValue } from 'src/actions/forms' |
|
||||
import { getFieldValue } from 'src/selectors/forms' |
|
||||
import { AppState } from 'src/types' |
|
||||
|
import { useTheme } from '../../hooks' |
||||
|
import { setFieldValue } from '../../actions/forms' |
||||
|
import { getFieldValue } from '../../selectors/forms' |
||||
|
import { AppState } from '../../types' |
||||
|
|
||||
interface Props { |
interface Props { |
||||
name: string |
name: string |
@ -1,5 +1,5 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../../hooks' |
||||
|
|
||||
const FieldLabel: FC = ({ children }) => { |
const FieldLabel: FC = ({ children }) => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,9 +1,9 @@ |
|||||
import React, { FC, MouseEventHandler } from 'react' |
import React, { FC, MouseEventHandler } from 'react' |
||||
import noop from 'lodash/noop' |
import noop from 'lodash/noop' |
||||
import { IconDefinition } from '@fortawesome/fontawesome-common-types' |
import { IconDefinition } from '@fortawesome/fontawesome-common-types' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../../hooks' |
||||
|
|
||||
import Button from 'src/components/controls/button' |
|
||||
|
import Button from '../../components/controls/button' |
||||
|
|
||||
export interface Props { |
export interface Props { |
||||
text: string |
text: string |
@ -1,9 +1,9 @@ |
|||||
import React, { FC, MouseEventHandler } from 'react' |
import React, { FC, MouseEventHandler } from 'react' |
||||
import noop from 'lodash/noop' |
import noop from 'lodash/noop' |
||||
import { IconDefinition } from '@fortawesome/fontawesome-common-types' |
import { IconDefinition } from '@fortawesome/fontawesome-common-types' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../../hooks' |
||||
|
|
||||
import Button from 'src/components/controls/button' |
|
||||
|
import Button from '../../components/controls/button' |
||||
|
|
||||
export interface Props { |
export interface Props { |
||||
text: string |
text: string |
@ -1,9 +1,9 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
||||
import { IconDefinition } from '@fortawesome/free-solid-svg-icons' |
import { IconDefinition } from '@fortawesome/free-solid-svg-icons' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../../hooks' |
||||
|
|
||||
import FieldLabel from 'src/components/controls/field-label' |
|
||||
|
import FieldLabel from '../../components/controls/field-label' |
||||
|
|
||||
interface Props { |
interface Props { |
||||
label: string |
label: string |
@ -1,13 +1,13 @@ |
|||||
import React, { FC, FocusEventHandler } from 'react' |
import React, { FC, FocusEventHandler } from 'react' |
||||
import { useSelector, useDispatch } from 'react-redux' |
import { useSelector, useDispatch } from 'react-redux' |
||||
import noop from 'lodash/noop' |
import noop from 'lodash/noop' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import { setFieldValue } from 'src/actions/forms' |
|
||||
import { getFieldValue, getFieldNotification } from 'src/selectors/forms' |
|
||||
import { AppState, FormNotification, NotificationType } from 'src/types' |
|
||||
|
import { useTheme } from '../../hooks' |
||||
|
import { setFieldValue } from '../../actions/forms' |
||||
|
import { getFieldValue, getFieldNotification } from '../../selectors/forms' |
||||
|
import { AppState, FormNotification, NotificationType } from '../../types' |
||||
|
|
||||
import FieldLabel from 'src/components/controls/field-label' |
|
||||
import FormNotificationComponent from 'src/components/form-notification' |
|
||||
|
import FieldLabel from '../../components/controls/field-label' |
||||
|
import FormNotificationComponent from '../../components/form-notification' |
||||
|
|
||||
export interface Props { |
export interface Props { |
||||
name: string |
name: string |
@ -1,15 +1,14 @@ |
|||||
import React, { FC, useState, useEffect } from 'react' |
import React, { FC, useState, useEffect } from 'react' |
||||
import { useSelector, useDispatch } from 'react-redux' |
import { useSelector, useDispatch } from 'react-redux' |
||||
import capitalize from 'lodash/capitalize' |
import capitalize from 'lodash/capitalize' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import { setFieldValue } from 'src/actions/forms' |
|
||||
import { setTheme } from 'src/actions/theme' |
|
||||
import { getFieldValue } from 'src/selectors/forms' |
|
||||
import { getThemeName } from 'src/selectors/theme' |
|
||||
import { AppState, Theme, ColorScheme } from 'src/types' |
|
||||
|
|
||||
import FieldLabel from 'src/components/controls/field-label' |
|
||||
import themes from 'src/themes' |
|
||||
|
import { useTheme } from '../../hooks' |
||||
|
import { setFieldValue } from '../../actions/forms' |
||||
|
import { setTheme } from '../../actions/theme' |
||||
|
import { getFieldValue } from '../../selectors/forms' |
||||
|
import { AppState, Theme, ColorScheme } from '../../types' |
||||
|
|
||||
|
import FieldLabel from '../../components/controls/field-label' |
||||
|
import themes from '../../themes' |
||||
|
|
||||
export interface Props { |
export interface Props { |
||||
name: string |
name: string |
@ -1,6 +1,6 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { Link } from 'react-router-dom' |
import { Link } from 'react-router-dom' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
const Divider: FC = () => <> ⚬ </> |
const Divider: FC = () => <> ⚬ </> |
||||
|
|
@ -1,6 +1,6 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import { NotificationType, FormNotification } from 'src/types' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
import { NotificationType, FormNotification } from '../types' |
||||
|
|
||||
interface Props { |
interface Props { |
||||
notification: FormNotification |
notification: FormNotification |
@ -1,5 +1,5 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
const Notification: FC = ({ children }) => { |
const Notification: FC = ({ children }) => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,5 +1,5 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
const HorizontalRule: FC = () => { |
const HorizontalRule: FC = () => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,6 +1,6 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import { LevelItem } from 'src/types' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
import { LevelItem } from '../types' |
||||
|
|
||||
interface Props { |
interface Props { |
||||
items: LevelItem[] |
items: LevelItem[] |
@ -1,6 +1,6 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useHistory } from 'react-router-dom' |
import { useHistory } from 'react-router-dom' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
const Logo: FC = () => { |
const Logo: FC = () => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,8 +1,8 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { Link } from 'react-router-dom' |
import { Link } from 'react-router-dom' |
||||
import capitalize from 'lodash/capitalize' |
import capitalize from 'lodash/capitalize' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import { User, GroupMembershipType } from 'src/types' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
import { User, GroupMembershipType } from '../types' |
||||
|
|
||||
interface Props { |
interface Props { |
||||
member: User |
member: User |
@ -1,8 +1,8 @@ |
|||||
import React, { FC, MouseEventHandler } from 'react' |
import React, { FC, MouseEventHandler } from 'react' |
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
||||
import { faWindowClose } from '@fortawesome/free-solid-svg-icons' |
import { faWindowClose } from '@fortawesome/free-solid-svg-icons' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import { NotificationType } from 'src/types' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
import { NotificationType } from '../types' |
||||
|
|
||||
interface Props { |
interface Props { |
||||
id: string |
id: string |
@ -1,11 +1,11 @@ |
|||||
import React, { FC, useEffect } from 'react' |
import React, { FC, useEffect } from 'react' |
||||
import { Link } from 'react-router-dom' |
import { Link } from 'react-router-dom' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import { setTitle } from 'src/utils' |
|
||||
|
import { useTheme } from '../../hooks' |
||||
|
import { setTitle } from '../../utils' |
||||
|
|
||||
import Section from 'src/components/section' |
|
||||
import Title from 'src/components/title' |
|
||||
import Subtitle from 'src/components/subtitle' |
|
||||
|
import Section from '../../components/section' |
||||
|
import Title from '../../components/title' |
||||
|
import Subtitle from '../../components/subtitle' |
||||
|
|
||||
const About: FC = () => { |
const About: FC = () => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,21 +1,21 @@ |
|||||
import React, { FC, useEffect } from 'react' |
import React, { FC, useEffect } from 'react' |
||||
import { useSelector, useDispatch } from 'react-redux' |
import { useSelector, useDispatch } from 'react-redux' |
||||
import { useHistory } from 'react-router-dom' |
import { useHistory } from 'react-router-dom' |
||||
import { useAuthenticationCheck, useTheme } from 'src/hooks' |
|
||||
import { fetchPendingApps, activateApp, setPreinstall } from 'src/actions/apps' |
|
||||
import { getAuthenticatedUser, getChecked } from 'src/selectors/authentication' |
|
||||
import { getPendingApps } from 'src/selectors/apps' |
|
||||
import { handleApiError } from 'src/api/errors' |
|
||||
import { setTitle } from 'src/utils' |
|
||||
import { AppThunkDispatch } from 'src/types' |
|
||||
|
import { useAuthenticationCheck, useTheme } from '../../hooks' |
||||
|
import { fetchPendingApps, activateApp, setPreinstall } from '../../actions/apps' |
||||
|
import { getAuthenticatedUser, getChecked } from '../../selectors/authentication' |
||||
|
import { getPendingApps } from '../../selectors/apps' |
||||
|
import { handleApiError } from '../../api/errors' |
||||
|
import { setTitle } from '../../utils' |
||||
|
import { AppThunkDispatch } from '../../types' |
||||
|
|
||||
import Section from 'src/components/section' |
|
||||
import Title from 'src/components/title' |
|
||||
import Loading from 'src/components/pages/loading' |
|
||||
import AppListItem from 'src/components/app-list-item' |
|
||||
import HorizontalRule from 'src/components/horizontal-rule' |
|
||||
import PrimaryButton from 'src/components/controls/primary-button' |
|
||||
import SecondaryButton from 'src/components/controls/secondary-button' |
|
||||
|
import Section from '../../components/section' |
||||
|
import Title from '../../components/title' |
||||
|
import Loading from '../../components/pages/loading' |
||||
|
import AppListItem from '../../components/app-list-item' |
||||
|
import HorizontalRule from '../../components/horizontal-rule' |
||||
|
import PrimaryButton from '../../components/controls/primary-button' |
||||
|
import SecondaryButton from '../../components/controls/secondary-button' |
||||
|
|
||||
const AdminApps: FC = () => { |
const AdminApps: FC = () => { |
||||
useAuthenticationCheck() |
useAuthenticationCheck() |
@ -1,20 +1,20 @@ |
|||||
import React, { FC, useEffect } from 'react' |
import React, { FC, useEffect } from 'react' |
||||
import { useSelector, useDispatch } from 'react-redux' |
import { useSelector, useDispatch } from 'react-redux' |
||||
import { useHistory } from 'react-router-dom' |
import { useHistory } from 'react-router-dom' |
||||
import { useAuthenticationCheck, useTheme } from 'src/hooks' |
|
||||
import { fetchPendingGroups, activateGroup } from 'src/actions/groups' |
|
||||
import { getAuthenticatedUser, getChecked } from 'src/selectors/authentication' |
|
||||
import { getPendingGroups } from 'src/selectors/groups' |
|
||||
import { handleApiError } from 'src/api/errors' |
|
||||
import { setTitle } from 'src/utils' |
|
||||
import { AppThunkDispatch } from 'src/types' |
|
||||
|
import { useAuthenticationCheck, useTheme } from '../../hooks' |
||||
|
import { fetchPendingGroups, activateGroup } from '../../actions/groups' |
||||
|
import { getAuthenticatedUser, getChecked } from '../../selectors/authentication' |
||||
|
import { getPendingGroups } from '../../selectors/groups' |
||||
|
import { handleApiError } from '../../api/errors' |
||||
|
import { setTitle } from '../../utils' |
||||
|
import { AppThunkDispatch } from '../../types' |
||||
|
|
||||
import Section from 'src/components/section' |
|
||||
import Title from 'src/components/title' |
|
||||
import Loading from 'src/components/pages/loading' |
|
||||
import GroupListItem from 'src/components/group-list-item' |
|
||||
import HorizontalRule from 'src/components//horizontal-rule' |
|
||||
import PrimaryButton from 'src/components/controls/primary-button' |
|
||||
|
import Section from '../../components/section' |
||||
|
import Title from '../../components/title' |
||||
|
import Loading from '../../components/pages/loading' |
||||
|
import GroupListItem from '../../components/group-list-item' |
||||
|
import HorizontalRule from '../../components//horizontal-rule' |
||||
|
import PrimaryButton from '../../components/controls/primary-button' |
||||
|
|
||||
const AdminGroups: FC = () => { |
const AdminGroups: FC = () => { |
||||
useAuthenticationCheck() |
useAuthenticationCheck() |
@ -1,14 +1,14 @@ |
|||||
import React, { FC, useEffect } from 'react' |
import React, { FC, useEffect } from 'react' |
||||
import { useSelector } from 'react-redux' |
import { useSelector } from 'react-redux' |
||||
import { Link, useHistory } from 'react-router-dom' |
import { Link, useHistory } from 'react-router-dom' |
||||
import { useTheme, useAuthenticationCheck } from 'src/hooks' |
|
||||
import { getAuthenticatedUser, getChecked } from 'src/selectors/authentication' |
|
||||
import { setTitle } from 'src/utils' |
|
||||
|
|
||||
import Section from 'src/components/section' |
|
||||
import Title from 'src/components/title' |
|
||||
import HorizontalRule from 'src/components/horizontal-rule' |
|
||||
import Loading from 'src/components/pages/loading' |
|
||||
|
import { useTheme, useAuthenticationCheck } from '../../hooks' |
||||
|
import { getAuthenticatedUser, getChecked } from '../../selectors/authentication' |
||||
|
import { setTitle } from '../../utils' |
||||
|
|
||||
|
import Section from '../../components/section' |
||||
|
import Title from '../../components/title' |
||||
|
import HorizontalRule from '../../components/horizontal-rule' |
||||
|
import Loading from '../../components/pages/loading' |
||||
|
|
||||
const Admin: FC = () => { |
const Admin: FC = () => { |
||||
useAuthenticationCheck() |
useAuthenticationCheck() |
@ -1,16 +1,16 @@ |
|||||
import React, { FC, useEffect } from 'react' |
import React, { FC, useEffect } from 'react' |
||||
import { useSelector, useDispatch } from 'react-redux' |
import { useSelector, useDispatch } from 'react-redux' |
||||
|
|
||||
import { fetchApps } from 'src/actions/apps' |
|
||||
import { getApps } from 'src/selectors/apps' |
|
||||
import { useTheme } from 'src/hooks' |
|
||||
import { setTitle } from 'src/utils' |
|
||||
import { AppThunkDispatch } from 'src/types' |
|
||||
|
|
||||
import Title from 'src/components/title' |
|
||||
import Section from 'src/components/section' |
|
||||
import HorizontalRule from 'src/components/horizontal-rule' |
|
||||
import AppListItem from 'src/components/app-list-item' |
|
||||
|
import { fetchApps } from '../../actions/apps' |
||||
|
import { getApps } from '../../selectors/apps' |
||||
|
import { useTheme } from '../../hooks' |
||||
|
import { setTitle } from '../../utils' |
||||
|
import { AppThunkDispatch } from '../../types' |
||||
|
|
||||
|
import Title from '../../components/title' |
||||
|
import Section from '../../components/section' |
||||
|
import HorizontalRule from '../../components/horizontal-rule' |
||||
|
import AppListItem from '../../components/app-list-item' |
||||
|
|
||||
const Apps: FC = () => { |
const Apps: FC = () => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,16 +1,16 @@ |
|||||
import React, { FC, useEffect } from 'react' |
import React, { FC, useEffect } from 'react' |
||||
import { useSelector, useDispatch } from 'react-redux' |
import { useSelector, useDispatch } from 'react-redux' |
||||
|
|
||||
import { fetchTimeline } from 'src/actions/posts' |
|
||||
import { getAuthenticated } from 'src/selectors/authentication' |
|
||||
import { setTitle } from 'src/utils' |
|
||||
import { AppThunkDispatch } from 'src/types' |
|
||||
|
|
||||
import Title from 'src/components/title' |
|
||||
import Composer from 'src/components/composer' |
|
||||
import Timeline from 'src/components/timeline' |
|
||||
import Section from 'src/components/section' |
|
||||
import Subtitle from 'src/components/subtitle' |
|
||||
|
import { fetchTimeline } from '../../actions/posts' |
||||
|
import { getAuthenticated } from '../../selectors/authentication' |
||||
|
import { setTitle } from '../../utils' |
||||
|
import { AppThunkDispatch } from '../../types' |
||||
|
|
||||
|
import Title from '../../components/title' |
||||
|
import Composer from '../../components/composer' |
||||
|
import Timeline from '../../components/timeline' |
||||
|
import Section from '../../components/section' |
||||
|
import Subtitle from '../../components/subtitle' |
||||
|
|
||||
const Home: FC = () => { |
const Home: FC = () => { |
||||
const authenticated = useSelector(getAuthenticated) |
const authenticated = useSelector(getAuthenticated) |
@ -1,9 +1,9 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
||||
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons' |
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import Title from 'src/components/title' |
|
||||
import Section from 'src/components/section' |
|
||||
|
import { useTheme } from '../../hooks' |
||||
|
import Title from '../../components/title' |
||||
|
import Section from '../../components/section' |
||||
|
|
||||
const Loading: FC = () => { |
const Loading: FC = () => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,9 +1,9 @@ |
|||||
import React, { FC, useState } from 'react' |
import React, { FC, useState } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
import { classNames } from 'src/utils' |
|
||||
import { Post, ClassDictionary } from 'src/types' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
import { classNames } from '../utils' |
||||
|
import { Post, ClassDictionary } from '../types' |
||||
|
|
||||
import PostComponent from 'src/components/post' |
|
||||
|
import PostComponent from '../components/post' |
||||
|
|
||||
interface Props { |
interface Props { |
||||
posts: Post[] |
posts: Post[] |
@ -1,5 +1,5 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
interface Props { |
interface Props { |
||||
value: number |
value: number |
@ -1,5 +1,5 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
const App: FC = () => { |
const App: FC = () => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,5 +1,5 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
const Section: FC = ({ children }) => { |
const Section: FC = ({ children }) => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,7 +1,7 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
||||
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons' |
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
const Spinner: FC = () => { |
const Spinner: FC = () => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,5 +1,5 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
const Subtitle: FC = ({ children }) => { |
const Subtitle: FC = ({ children }) => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -1,5 +1,5 @@ |
|||||
import React, { FC } from 'react' |
import React, { FC } from 'react' |
||||
import { useTheme } from 'src/hooks' |
|
||||
|
import { useTheme } from '../hooks' |
||||
|
|
||||
const Title: FC = ({ children }) => { |
const Title: FC = ({ children }) => { |
||||
const theme = useTheme() |
const theme = useTheme() |
@ -0,0 +1,17 @@ |
|||||
|
export const MAX_ID_LENGTH = 40 |
||||
|
export const MAX_NAME_LENGTH = 80 |
||||
|
|
||||
|
export const LOCAL_STORAGE_ACCESS_TOKEN_KEY = 'access-token' |
||||
|
export const LOCAL_STORAGE_ACCESS_TOKEN_EXPIRES_AT_KEY = 'access-token-expires-at' |
||||
|
export const LOCAL_STORAGE_REFRESH_TOKEN_KEY = 'refresh-token' |
||||
|
|
||||
|
export const MEDIA_DEFAULT_MAX_SIZE = 5242880 |
||||
|
export const MEDIA_COVER_MAX_SIZE = 5242880 |
||||
|
export const MEDIA_ICON_MAX_SIZE = 1048576 |
||||
|
|
||||
|
export const PRIVACY_OPTIONS = { |
||||
|
public: 'Anyone can see your posts', |
||||
|
group: 'Only the people in your community can see your posts', |
||||
|
subscribers: 'Only your subscribers can see your posts', |
||||
|
private: 'Nobody can see your posts', |
||||
|
} |
After Width: 16 | Height: 16 | Size: 357 B |
After Width: 32 | Height: 32 | Size: 455 B |
Some files were not shown because too many files changed in this diff
Write
Preview
Loading…
Cancel
Save
Reference in new issue