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 { |
|||
apps: App[] |
@ -1,10 +1,10 @@ |
|||
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 { |
|||
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 => { |
|||
return async dispatch => { |
@ -1,5 +1,5 @@ |
|||
import { Action } from 'redux' |
|||
import { EntityListKey } from 'src/types' |
|||
import { EntityListKey } from '../types' |
|||
|
|||
export interface ListAppendAction extends Action { |
|||
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 { |
|||
id: string |
@ -1,15 +1,15 @@ |
|||
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 { |
|||
LOCAL_STORAGE_ACCESS_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 { |
|||
type: 'REGISTRATION_SET_STEP' |
@ -1,30 +1,31 @@ |
|||
import { Action } from 'redux' |
|||
import { RequestKey } from '../types' |
|||
|
|||
export interface StartRequestAction extends Action { |
|||
type: 'REQUESTS_START_REQUEST' |
|||
payload: { |
|||
id: string |
|||
id: RequestKey |
|||
} |
|||
} |
|||
|
|||
export interface FinishRequestAction extends Action { |
|||
type: 'REQUESTS_FINISH_REQUEST' |
|||
payload: { |
|||
id: string |
|||
id: RequestKey |
|||
succeeded: boolean |
|||
} |
|||
} |
|||
|
|||
export type RequestsActions = StartRequestAction | FinishRequestAction |
|||
|
|||
export const startRequest = (id: string): StartRequestAction => ({ |
|||
export const startRequest = (id: RequestKey): StartRequestAction => ({ |
|||
type: 'REQUESTS_START_REQUEST', |
|||
payload: { |
|||
id, |
|||
}, |
|||
}) |
|||
|
|||
export const finishRequest = (id: string, succeeded: boolean): FinishRequestAction => ({ |
|||
export const finishRequest = (id: RequestKey, succeeded: boolean): FinishRequestAction => ({ |
|||
type: 'REQUESTS_FINISH_REQUEST', |
|||
payload: { |
|||
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 => { |
|||
return async dispatch => { |
@ -1,8 +1,8 @@ |
|||
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) { |
|||
console.error('Error:', err) |
@ -1,9 +1,9 @@ |
|||
import React, { FC } from 'react' |
|||
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 { |
|||
name: string |
@ -1,5 +1,5 @@ |
|||
import React, { FC } from 'react' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../../hooks' |
|||
|
|||
const FieldLabel: FC = ({ children }) => { |
|||
const theme = useTheme() |
@ -1,9 +1,9 @@ |
|||
import React, { FC, MouseEventHandler } from 'react' |
|||
import noop from 'lodash/noop' |
|||
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 { |
|||
text: string |
@ -1,9 +1,9 @@ |
|||
import React, { FC, MouseEventHandler } from 'react' |
|||
import noop from 'lodash/noop' |
|||
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 { |
|||
text: string |
@ -1,9 +1,9 @@ |
|||
import React, { FC } from 'react' |
|||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
|||
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 { |
|||
label: string |
@ -1,13 +1,13 @@ |
|||
import React, { FC, FocusEventHandler } from 'react' |
|||
import { useSelector, useDispatch } from 'react-redux' |
|||
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 { |
|||
name: string |
@ -1,15 +1,14 @@ |
|||
import React, { FC, useState, useEffect } from 'react' |
|||
import { useSelector, useDispatch } from 'react-redux' |
|||
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 { |
|||
name: string |
@ -1,6 +1,6 @@ |
|||
import React, { FC } from 'react' |
|||
import { Link } from 'react-router-dom' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
const Divider: FC = () => <> ⚬ </> |
|||
|
@ -1,6 +1,6 @@ |
|||
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 { |
|||
notification: FormNotification |
@ -1,5 +1,5 @@ |
|||
import React, { FC } from 'react' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
const Notification: FC = ({ children }) => { |
|||
const theme = useTheme() |
@ -1,5 +1,5 @@ |
|||
import React, { FC } from 'react' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
const HorizontalRule: FC = () => { |
|||
const theme = useTheme() |
@ -1,6 +1,6 @@ |
|||
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 { |
|||
items: LevelItem[] |
@ -1,6 +1,6 @@ |
|||
import React, { FC } from 'react' |
|||
import { useHistory } from 'react-router-dom' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
const Logo: FC = () => { |
|||
const theme = useTheme() |
@ -1,8 +1,8 @@ |
|||
import React, { FC } from 'react' |
|||
import { Link } from 'react-router-dom' |
|||
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 { |
|||
member: User |
@ -1,8 +1,8 @@ |
|||
import React, { FC, MouseEventHandler } from 'react' |
|||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
|||
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 { |
|||
id: string |
@ -1,11 +1,11 @@ |
|||
import React, { FC, useEffect } from 'react' |
|||
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 theme = useTheme() |
@ -1,21 +1,21 @@ |
|||
import React, { FC, useEffect } from 'react' |
|||
import { useSelector, useDispatch } from 'react-redux' |
|||
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 = () => { |
|||
useAuthenticationCheck() |
@ -1,20 +1,20 @@ |
|||
import React, { FC, useEffect } from 'react' |
|||
import { useSelector, useDispatch } from 'react-redux' |
|||
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 = () => { |
|||
useAuthenticationCheck() |
@ -1,14 +1,14 @@ |
|||
import React, { FC, useEffect } from 'react' |
|||
import { useSelector } from 'react-redux' |
|||
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 = () => { |
|||
useAuthenticationCheck() |
@ -1,16 +1,16 @@ |
|||
import React, { FC, useEffect } from 'react' |
|||
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 theme = useTheme() |
@ -1,16 +1,16 @@ |
|||
import React, { FC, useEffect } from 'react' |
|||
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 authenticated = useSelector(getAuthenticated) |
@ -1,9 +1,9 @@ |
|||
import React, { FC } from 'react' |
|||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
|||
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 theme = useTheme() |
@ -1,9 +1,9 @@ |
|||
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 { |
|||
posts: Post[] |
@ -1,5 +1,5 @@ |
|||
import React, { FC } from 'react' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
interface Props { |
|||
value: number |
@ -1,5 +1,5 @@ |
|||
import React, { FC } from 'react' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
const App: FC = () => { |
|||
const theme = useTheme() |
@ -1,5 +1,5 @@ |
|||
import React, { FC } from 'react' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
const Section: FC = ({ children }) => { |
|||
const theme = useTheme() |
@ -1,7 +1,7 @@ |
|||
import React, { FC } from 'react' |
|||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' |
|||
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
const Spinner: FC = () => { |
|||
const theme = useTheme() |
@ -1,5 +1,5 @@ |
|||
import React, { FC } from 'react' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
const Subtitle: FC = ({ children }) => { |
|||
const theme = useTheme() |
@ -1,5 +1,5 @@ |
|||
import React, { FC } from 'react' |
|||
import { useTheme } from 'src/hooks' |
|||
import { useTheme } from '../hooks' |
|||
|
|||
const Title: FC = ({ children }) => { |
|||
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