diff --git a/apiserver/plane/settings/production.py b/apiserver/plane/settings/production.py index 7e76404f69..2e40c5998d 100644 --- a/apiserver/plane/settings/production.py +++ b/apiserver/plane/settings/production.py @@ -70,8 +70,12 @@ CORS_ALLOW_HEADERS = [ ] CORS_ALLOW_CREDENTIALS = True -# Simplified static file serving. -STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage" + +STORAGES = { + "staticfiles": { + "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage", + }, +} if bool(os.environ.get("SENTRY_DSN", False)): sentry_sdk.init( @@ -87,7 +91,7 @@ if bool(os.environ.get("SENTRY_DSN", False)): if DOCKERIZED and USE_MINIO: INSTALLED_APPS += ("storages",) - STORAGES = {"default": {"BACKEND": "storages.backends.s3boto3.S3Boto3Storage"}} + STORAGES["default"] = {"BACKEND": "storages.backends.s3boto3.S3Boto3Storage"} # The AWS access key to use. AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID", "access-key") # The AWS secret access key to use. @@ -188,7 +192,10 @@ else: # extra characters appended. AWS_S3_FILE_OVERWRITE = False - DEFAULT_FILE_STORAGE = "django_s3_storage.storage.S3Storage" + STORAGES["default"] = { + "BACKEND": "django_s3_storage.storage.S3Storage", + } + # AWS Settings End # Enable Connection Pooling (if desired) @@ -203,9 +210,6 @@ ALLOWED_HOSTS = [ ] -# Simplified static file serving. -STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage" - SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True diff --git a/apiserver/plane/settings/staging.py b/apiserver/plane/settings/staging.py index 5a43e266ec..076bb3e3cf 100644 --- a/apiserver/plane/settings/staging.py +++ b/apiserver/plane/settings/staging.py @@ -48,8 +48,12 @@ ALLOWED_HOSTS = ["*"] # TODO: Make it FALSE and LIST DOMAINS IN FULL PROD. CORS_ALLOW_ALL_ORIGINS = True -# Simplified static file serving. -STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage" +STORAGES = { + "staticfiles": { + "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage", + }, +} + # Make true if running in a docker environment DOCKERIZED = int(os.environ.get( @@ -151,7 +155,9 @@ AWS_S3_SIGNATURE_VERSION = None AWS_S3_FILE_OVERWRITE = False # AWS Settings End - +STORAGES["default"] = { + "BACKEND": "django_s3_storage.storage.S3Storage", +} # Enable Connection Pooling (if desired) # DATABASES['default']['ENGINE'] = 'django_postgrespool' @@ -164,11 +170,6 @@ ALLOWED_HOSTS = [ "*", ] - -DEFAULT_FILE_STORAGE = "django_s3_storage.storage.S3Storage" -# Simplified static file serving. -STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage" - SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True diff --git a/apps/app/components/analytics/custom-analytics/sidebar.tsx b/apps/app/components/analytics/custom-analytics/sidebar.tsx index b533df5193..418d87c4a4 100644 --- a/apps/app/components/analytics/custom-analytics/sidebar.tsx +++ b/apps/app/components/analytics/custom-analytics/sidebar.tsx @@ -23,6 +23,7 @@ import { import { ContrastIcon, LayerDiagonalIcon } from "components/icons"; // helpers import { renderShortDate } from "helpers/date-time.helper"; +import { renderEmoji } from "helpers/emoji.helper"; // types import { IAnalyticsParams, @@ -221,7 +222,7 @@ export const AnalyticsSidebar: React.FC = ({
{project.emoji ? ( - {String.fromCodePoint(parseInt(project.emoji))} + {renderEmoji(project.emoji)} ) : project.icon_prop ? (
@@ -336,7 +337,7 @@ export const AnalyticsSidebar: React.FC = ({
{projectDetails?.emoji ? (
- {String.fromCodePoint(parseInt(projectDetails.emoji))} + {renderEmoji(projectDetails.emoji)}
) : projectDetails?.icon_prop ? (
diff --git a/apps/app/components/emoji-icon-picker/index.tsx b/apps/app/components/emoji-icon-picker/index.tsx index f8f8e54e9e..fecba1c154 100644 --- a/apps/app/components/emoji-icon-picker/index.tsx +++ b/apps/app/components/emoji-icon-picker/index.tsx @@ -10,7 +10,7 @@ import emojis from "./emojis.json"; import icons from "./icons.json"; // helpers import { getRecentEmojis, saveRecentEmoji } from "./helpers"; -import { getRandomEmoji } from "helpers/common.helper"; +import { getRandomEmoji, renderEmoji } from "helpers/emoji.helper"; // hooks import useOutsideClickDetector from "hooks/use-outside-click-detector"; @@ -101,7 +101,7 @@ const EmojiIconPicker: React.FC = ({ label, value, onChange, onIconColorC setIsOpen(false); }} > - {String.fromCodePoint(parseInt(emoji))} + {renderEmoji(emoji)} ))}
@@ -121,7 +121,7 @@ const EmojiIconPicker: React.FC = ({ label, value, onChange, onIconColorC setIsOpen(false); }} > - {String.fromCodePoint(parseInt(emoji))} + {renderEmoji(emoji)} ))}
diff --git a/apps/app/components/project/create-project-modal.tsx b/apps/app/components/project/create-project-modal.tsx index 06fc73348d..f17558d9b3 100644 --- a/apps/app/components/project/create-project-modal.tsx +++ b/apps/app/components/project/create-project-modal.tsx @@ -21,7 +21,7 @@ import { XMarkIcon } from "@heroicons/react/24/outline"; import { ImagePickerPopover } from "components/core"; import EmojiIconPicker from "components/emoji-icon-picker"; // helpers -import { getRandomEmoji } from "helpers/common.helper"; +import { getRandomEmoji, renderEmoji } from "helpers/emoji.helper"; // types import { ICurrentUserResponse, IProject } from "types"; // fetch-keys @@ -232,7 +232,7 @@ export const CreateProjectModal: React.FC = (props) => { {value.name} ) : ( - String.fromCodePoint(parseInt(value)) + renderEmoji(value) ) ) : ( "Icon" diff --git a/apps/app/components/project/single-project-card.tsx b/apps/app/components/project/single-project-card.tsx index 9b7bf1c99a..b4fe9c1b19 100644 --- a/apps/app/components/project/single-project-card.tsx +++ b/apps/app/components/project/single-project-card.tsx @@ -24,6 +24,7 @@ import { // helpers import { renderShortDateWithYearFormat } from "helpers/date-time.helper"; import { copyTextToClipboard, truncateText } from "helpers/string.helper"; +import { renderEmoji } from "helpers/emoji.helper"; // types import type { IFavoriteProject, IProject } from "types"; // fetch-keys @@ -184,7 +185,7 @@ export const SingleProjectCard: React.FC = ({

{project.name}

{project.emoji ? ( - {String.fromCodePoint(parseInt(project.emoji))} + {renderEmoji(project.emoji)} ) : project.icon_prop ? ( = ({
{project.emoji ? ( - {String.fromCodePoint(parseInt(project.emoji))} + {renderEmoji(project.emoji)} ) : project.icon_prop ? (
diff --git a/apps/app/helpers/common.helper.ts b/apps/app/helpers/common.helper.ts index 887fe80520..4220a7174c 100644 --- a/apps/app/helpers/common.helper.ts +++ b/apps/app/helpers/common.helper.ts @@ -16,23 +16,3 @@ export const debounce = (func: any, wait: number, immediate: boolean = false) => if (callNow) func(...args); }; }; - -export const getRandomEmoji = () => { - const emojis = [ - "8986", - "9200", - "128204", - "127773", - "127891", - "127947", - "128076", - "128077", - "128187", - "128188", - "128512", - "128522", - "128578", - ]; - - return emojis[Math.floor(Math.random() * emojis.length)]; -}; diff --git a/apps/app/helpers/emoji.helper.ts b/apps/app/helpers/emoji.helper.ts new file mode 100644 index 0000000000..f16d0021cc --- /dev/null +++ b/apps/app/helpers/emoji.helper.ts @@ -0,0 +1,25 @@ +export const getRandomEmoji = () => { + const emojis = [ + "8986", + "9200", + "128204", + "127773", + "127891", + "127947", + "128076", + "128077", + "128187", + "128188", + "128512", + "128522", + "128578", + ]; + + return emojis[Math.floor(Math.random() * emojis.length)]; +}; + +export const renderEmoji = (emoji: string) => { + if (!emoji) return; + + return isNaN(parseInt(emoji)) ? emoji : String.fromCodePoint(parseInt(emoji)); +}; diff --git a/apps/app/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx b/apps/app/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx index 92b55cebe7..e8ac1d9d0d 100644 --- a/apps/app/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx +++ b/apps/app/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx @@ -27,6 +27,8 @@ import { DangerButton, } from "components/ui"; import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs"; +// helpers +import { renderEmoji } from "helpers/emoji.helper"; // types import { IProject, IWorkspace } from "types"; import type { NextPage } from "next"; @@ -186,7 +188,7 @@ const GeneralSettings: NextPage = () => { {value.name} ) : ( - String.fromCodePoint(parseInt(value)) + renderEmoji(value) ) ) : ( "Icon"