mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-03 19:36:20 +00:00 
			
		
		
		
	Merge pull request #11752 from strapi/v4/product-copy-text-changes-v1
Product copy text changes v1
This commit is contained in:
		
						commit
						398ecd9071
					
				@ -40,18 +40,18 @@ const Notification = ({ dispatch, notification }) => {
 | 
			
		||||
    variant = 'default';
 | 
			
		||||
    alertTitle = formatMessage({
 | 
			
		||||
      id: 'notification.default.title',
 | 
			
		||||
      defaultMessage: 'Information Alert:',
 | 
			
		||||
      defaultMessage: 'Information:',
 | 
			
		||||
    });
 | 
			
		||||
  } else if (type === 'warning') {
 | 
			
		||||
    alertTitle = formatMessage({
 | 
			
		||||
      id: 'notification.warning.title',
 | 
			
		||||
      defaultMessage: 'Warning Alert:',
 | 
			
		||||
      defaultMessage: 'Warning:',
 | 
			
		||||
    });
 | 
			
		||||
    variant = 'danger';
 | 
			
		||||
  } else {
 | 
			
		||||
    alertTitle = formatMessage({
 | 
			
		||||
      id: 'notification.success.title',
 | 
			
		||||
      defaultMessage: 'Success Alert:',
 | 
			
		||||
      defaultMessage: 'Success:',
 | 
			
		||||
    });
 | 
			
		||||
    variant = 'success';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@ const DynamicTable = ({
 | 
			
		||||
  canCreate,
 | 
			
		||||
  canDelete,
 | 
			
		||||
  contentTypeName,
 | 
			
		||||
  action,
 | 
			
		||||
  isBulkable,
 | 
			
		||||
  isLoading,
 | 
			
		||||
  onConfirmDelete,
 | 
			
		||||
@ -77,6 +78,7 @@ const DynamicTable = ({
 | 
			
		||||
    <Table
 | 
			
		||||
      components={{ ConfirmDialogDelete, ConfirmDialogDeleteAll }}
 | 
			
		||||
      contentType={contentTypeName}
 | 
			
		||||
      action={action}
 | 
			
		||||
      isLoading={isLoading}
 | 
			
		||||
      headers={tableHeaders}
 | 
			
		||||
      onConfirmDelete={onConfirmDelete}
 | 
			
		||||
@ -98,10 +100,15 @@ const DynamicTable = ({
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
DynamicTable.defaultProps = {
 | 
			
		||||
  action: undefined,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
DynamicTable.propTypes = {
 | 
			
		||||
  canCreate: PropTypes.bool.isRequired,
 | 
			
		||||
  canDelete: PropTypes.bool.isRequired,
 | 
			
		||||
  contentTypeName: PropTypes.string.isRequired,
 | 
			
		||||
  action: PropTypes.node,
 | 
			
		||||
  isBulkable: PropTypes.bool.isRequired,
 | 
			
		||||
  isLoading: PropTypes.bool.isRequired,
 | 
			
		||||
  layout: PropTypes.exact({
 | 
			
		||||
 | 
			
		||||
@ -48,9 +48,7 @@ const LeftMenu = () => {
 | 
			
		||||
      id: 'collectionTypes',
 | 
			
		||||
      title: {
 | 
			
		||||
        id: getTrad('components.LeftMenu.collection-types'),
 | 
			
		||||
        defaultMessage:
 | 
			
		||||
          '{number, plural, =0 {Collection Types} one {Collection Type } other {Collection Types}}',
 | 
			
		||||
        values: { number: intlCollectionTypeLinks.length },
 | 
			
		||||
        defaultMessage: 'Collection Types',
 | 
			
		||||
      },
 | 
			
		||||
      searchable: true,
 | 
			
		||||
      links: sortBy(matchByTitle(intlCollectionTypeLinks, search), object =>
 | 
			
		||||
@ -61,9 +59,7 @@ const LeftMenu = () => {
 | 
			
		||||
      id: 'singleTypes',
 | 
			
		||||
      title: {
 | 
			
		||||
        id: getTrad('components.LeftMenu.single-types'),
 | 
			
		||||
        defaultMessage:
 | 
			
		||||
          '{number, plural, =0 {Single Types} one {Single Type } other {Single Types}}',
 | 
			
		||||
        values: { number: intlSingleTypeLinks.length },
 | 
			
		||||
        defaultMessage: 'Single Types',
 | 
			
		||||
      },
 | 
			
		||||
      searchable: true,
 | 
			
		||||
      links: sortBy(matchByTitle(intlSingleTypeLinks, search), object =>
 | 
			
		||||
 | 
			
		||||
@ -569,7 +569,7 @@ describe('Content manager | App | main', () => {
 | 
			
		||||
                        <span
 | 
			
		||||
                          class="c4 c20"
 | 
			
		||||
                        >
 | 
			
		||||
                          Collection Type 
 | 
			
		||||
                          Collection Types
 | 
			
		||||
                        </span>
 | 
			
		||||
                      </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
@ -641,7 +641,7 @@ describe('Content manager | App | main', () => {
 | 
			
		||||
                        <span
 | 
			
		||||
                          class="c4 c20"
 | 
			
		||||
                        >
 | 
			
		||||
                          Single Type 
 | 
			
		||||
                          Single Types
 | 
			
		||||
                        </span>
 | 
			
		||||
                      </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
@ -243,7 +243,7 @@ const EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, upd
 | 
			
		||||
              >
 | 
			
		||||
                {formatMessage({
 | 
			
		||||
                  id: 'app.components.go-back',
 | 
			
		||||
                  defaultMessage: 'Go back',
 | 
			
		||||
                  defaultMessage: 'Back',
 | 
			
		||||
                })}
 | 
			
		||||
              </Link>
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -1143,7 +1143,7 @@ exports[`EditSettingsView renders and matches the snapshot 1`] = `
 | 
			
		||||
            <span
 | 
			
		||||
              class="c6"
 | 
			
		||||
            >
 | 
			
		||||
              Go back
 | 
			
		||||
              Back
 | 
			
		||||
            </span>
 | 
			
		||||
          </a>
 | 
			
		||||
        </div>
 | 
			
		||||
@ -3027,7 +3027,7 @@ exports[`EditSettingsView should add field 1`] = `
 | 
			
		||||
              <span
 | 
			
		||||
                class="c6"
 | 
			
		||||
              >
 | 
			
		||||
                Go back
 | 
			
		||||
                Back
 | 
			
		||||
              </span>
 | 
			
		||||
            </a>
 | 
			
		||||
          </div>
 | 
			
		||||
@ -5405,7 +5405,7 @@ exports[`EditSettingsView should add relation 1`] = `
 | 
			
		||||
              <span
 | 
			
		||||
                class="c6"
 | 
			
		||||
              >
 | 
			
		||||
                Go back
 | 
			
		||||
                Back
 | 
			
		||||
              </span>
 | 
			
		||||
            </a>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
@ -191,7 +191,7 @@ const ListSettingsView = ({ layout, slug }) => {
 | 
			
		||||
          <HeaderLayout
 | 
			
		||||
            navigationAction={
 | 
			
		||||
              <Link startIcon={<ArrowLeft />} to={goBackUrl} id="go-back">
 | 
			
		||||
                {formatMessage({ id: 'app.components.go-back', defaultMessage: 'Go back' })}
 | 
			
		||||
                {formatMessage({ id: 'app.components.go-back', defaultMessage: 'Back' })}
 | 
			
		||||
              </Link>
 | 
			
		||||
            }
 | 
			
		||||
            primaryAction={
 | 
			
		||||
 | 
			
		||||
@ -1004,7 +1004,7 @@ exports[`ADMIN | CM | LV | Configure the view renders and matches the snapshot 1
 | 
			
		||||
                <span
 | 
			
		||||
                  class="c9"
 | 
			
		||||
                >
 | 
			
		||||
                  Go back
 | 
			
		||||
                  Back
 | 
			
		||||
                </span>
 | 
			
		||||
              </a>
 | 
			
		||||
            </div>
 | 
			
		||||
@ -2892,7 +2892,7 @@ exports[`ADMIN | CM | LV | Configure the view should add field 1`] = `
 | 
			
		||||
                  <span
 | 
			
		||||
                    class="c9"
 | 
			
		||||
                  >
 | 
			
		||||
                    Go back
 | 
			
		||||
                    Back
 | 
			
		||||
                  </span>
 | 
			
		||||
                </a>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,8 @@ import { Box } from '@strapi/design-system/Box';
 | 
			
		||||
import { ActionLayout, ContentLayout, HeaderLayout } from '@strapi/design-system/Layout';
 | 
			
		||||
import { useNotifyAT } from '@strapi/design-system/LiveRegions';
 | 
			
		||||
import { Button } from '@strapi/design-system/Button';
 | 
			
		||||
import { Link } from '@strapi/design-system/Link';
 | 
			
		||||
import ArrowLeft from '@strapi/icons/ArrowLeft';
 | 
			
		||||
import Plus from '@strapi/icons/Plus';
 | 
			
		||||
import Cog from '@strapi/icons/Cog';
 | 
			
		||||
import axios from 'axios';
 | 
			
		||||
@ -234,29 +236,43 @@ function ListView({
 | 
			
		||||
      )
 | 
			
		||||
    : null;
 | 
			
		||||
 | 
			
		||||
  const createAction = canCreate ? (
 | 
			
		||||
    <Button
 | 
			
		||||
      onClick={() => {
 | 
			
		||||
        const trackerProperty = hasDraftAndPublish ? { status: 'draft' } : {};
 | 
			
		||||
  const getCreateAction = props =>
 | 
			
		||||
    canCreate ? (
 | 
			
		||||
      <Button
 | 
			
		||||
        {...props}
 | 
			
		||||
        onClick={() => {
 | 
			
		||||
          const trackerProperty = hasDraftAndPublish ? { status: 'draft' } : {};
 | 
			
		||||
 | 
			
		||||
        trackUsageRef.current('willCreateEntry', trackerProperty);
 | 
			
		||||
        push({
 | 
			
		||||
          pathname: `${pathname}/create`,
 | 
			
		||||
          search: query.plugins ? pluginsQueryParams : '',
 | 
			
		||||
        });
 | 
			
		||||
      }}
 | 
			
		||||
      startIcon={<Plus />}
 | 
			
		||||
    >
 | 
			
		||||
      {formatMessage({
 | 
			
		||||
        id: getTrad('HeaderLayout.button.label-add-entry'),
 | 
			
		||||
        defaultMessage: 'Add new entry',
 | 
			
		||||
      })}
 | 
			
		||||
    </Button>
 | 
			
		||||
  ) : null;
 | 
			
		||||
          trackUsageRef.current('willCreateEntry', trackerProperty);
 | 
			
		||||
          push({
 | 
			
		||||
            pathname: `${pathname}/create`,
 | 
			
		||||
            search: query.plugins ? pluginsQueryParams : '',
 | 
			
		||||
          });
 | 
			
		||||
        }}
 | 
			
		||||
        startIcon={<Plus />}
 | 
			
		||||
      >
 | 
			
		||||
        {formatMessage({
 | 
			
		||||
          id: getTrad('HeaderLayout.button.label-add-entry'),
 | 
			
		||||
          defaultMessage: 'Create new entry',
 | 
			
		||||
        })}
 | 
			
		||||
      </Button>
 | 
			
		||||
    ) : null;
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <Main aria-busy={isLoading}>
 | 
			
		||||
      <HeaderLayout primaryAction={createAction} subtitle={subtitle} title={headerLayoutTitle} />
 | 
			
		||||
      <HeaderLayout
 | 
			
		||||
        primaryAction={getCreateAction()}
 | 
			
		||||
        subtitle={subtitle}
 | 
			
		||||
        title={headerLayoutTitle}
 | 
			
		||||
        navigationAction={
 | 
			
		||||
          <Link startIcon={<ArrowLeft />} to="/content-manager/">
 | 
			
		||||
            {formatMessage({
 | 
			
		||||
              id: 'app.components.HeaderLayout.link.go-back',
 | 
			
		||||
              defaultMessage: 'Back',
 | 
			
		||||
            })}
 | 
			
		||||
          </Link>
 | 
			
		||||
        }
 | 
			
		||||
      />
 | 
			
		||||
      {!canRead && (
 | 
			
		||||
        <ActionLayout endActions={<InjectionZone area="contentManager.listView.actions" />} />
 | 
			
		||||
      )}
 | 
			
		||||
@ -320,6 +336,7 @@ function ListView({
 | 
			
		||||
              // FIXME: remove the layout props drilling
 | 
			
		||||
              layout={layout}
 | 
			
		||||
              rows={data}
 | 
			
		||||
              action={getCreateAction({ variant: 'secondary' })}
 | 
			
		||||
            />
 | 
			
		||||
            <PaginationFooter pagination={{ pageCount: pagination?.pageCount || 1 }} />
 | 
			
		||||
          </>
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@ import adminPermissions from '../../../permissions';
 | 
			
		||||
 | 
			
		||||
const defaultGlobalLinks = [
 | 
			
		||||
  {
 | 
			
		||||
    intlLabel: { id: 'Settings.application.title', defaultMessage: 'Application' },
 | 
			
		||||
    intlLabel: { id: 'Settings.application.title', defaultMessage: 'Overview' },
 | 
			
		||||
    to: '/settings/application-infos',
 | 
			
		||||
    id: '000-application-infos',
 | 
			
		||||
    isDisplayed: false,
 | 
			
		||||
 | 
			
		||||
@ -165,7 +165,7 @@ const ApiTokenCreateView = () => {
 | 
			
		||||
                  <Link startIcon={<ArrowLeft />} to="/settings/api-tokens">
 | 
			
		||||
                    {formatMessage({
 | 
			
		||||
                      id: 'app.components.go-back',
 | 
			
		||||
                      defaultMessage: 'Go back',
 | 
			
		||||
                      defaultMessage: 'Back',
 | 
			
		||||
                    })}
 | 
			
		||||
                  </Link>
 | 
			
		||||
                }
 | 
			
		||||
@ -185,7 +185,7 @@ const ApiTokenCreateView = () => {
 | 
			
		||||
                    <Stack size={4}>
 | 
			
		||||
                      <Typography variant="delta" as="h2">
 | 
			
		||||
                        {formatMessage({
 | 
			
		||||
                          id: 'app.components.Users.ModalCreateBody.block-title.details',
 | 
			
		||||
                          id: 'Settings.apiTokens.details',
 | 
			
		||||
                          defaultMessage: 'Details',
 | 
			
		||||
                        })}
 | 
			
		||||
                      </Typography>
 | 
			
		||||
 | 
			
		||||
@ -26,10 +26,10 @@ const ApplicationInfosPage = () => {
 | 
			
		||||
      <SettingsPageTitle name="Application" />
 | 
			
		||||
      <Main>
 | 
			
		||||
        <HeaderLayout
 | 
			
		||||
          title={formatMessage({ id: 'Settings.application.title', defaultMessage: 'Application' })}
 | 
			
		||||
          title={formatMessage({ id: 'Settings.application.title', defaultMessage: 'Overview' })}
 | 
			
		||||
          subtitle={formatMessage({
 | 
			
		||||
            id: 'Settings.application.description',
 | 
			
		||||
            defaultMessage: "See your project's details",
 | 
			
		||||
            defaultMessage: 'Administration panel’s global information',
 | 
			
		||||
          })}
 | 
			
		||||
        />
 | 
			
		||||
        <ContentLayout>
 | 
			
		||||
@ -45,8 +45,8 @@ const ApplicationInfosPage = () => {
 | 
			
		||||
            <Stack size={5}>
 | 
			
		||||
              <Typography variant="delta" as="h3">
 | 
			
		||||
                {formatMessage({
 | 
			
		||||
                  id: 'Settings.application.information',
 | 
			
		||||
                  defaultMessage: 'Information',
 | 
			
		||||
                  id: 'Settings.application.details',
 | 
			
		||||
                  defaultMessage: 'Details',
 | 
			
		||||
                })}
 | 
			
		||||
              </Typography>
 | 
			
		||||
 | 
			
		||||
@ -54,11 +54,24 @@ const ApplicationInfosPage = () => {
 | 
			
		||||
                <GridItem col={6} s={12}>
 | 
			
		||||
                  <Typography variant="sigma" textColor="neutral600">
 | 
			
		||||
                    {formatMessage({
 | 
			
		||||
                      id: 'Settings.application.details',
 | 
			
		||||
                      defaultMessage: 'details',
 | 
			
		||||
                      id: 'Settings.application.strapiVersion',
 | 
			
		||||
                      defaultMessage: 'strapi version',
 | 
			
		||||
                    })}
 | 
			
		||||
                  </Typography>
 | 
			
		||||
                  <Typography as="p">v{strapiVersion}</Typography>
 | 
			
		||||
                  <Link
 | 
			
		||||
                    href={
 | 
			
		||||
                      appInfos.communityEdition
 | 
			
		||||
                        ? 'https://discord.strapi.io'
 | 
			
		||||
                        : 'https://support.strapi.io/support/home'
 | 
			
		||||
                    }
 | 
			
		||||
                    endIcon={<ExternalLink />}
 | 
			
		||||
                  >
 | 
			
		||||
                    {formatMessage({
 | 
			
		||||
                      id: 'Settings.application.get-help',
 | 
			
		||||
                      defaultMessage: 'Get help',
 | 
			
		||||
                    })}
 | 
			
		||||
                  </Link>
 | 
			
		||||
                </GridItem>
 | 
			
		||||
                <GridItem col={6} s={12}>
 | 
			
		||||
                  <Typography variant="sigma" textColor="neutral600">
 | 
			
		||||
@ -96,7 +109,7 @@ const ApplicationInfosPage = () => {
 | 
			
		||||
                  <Link href="https://strapi.io/pricing-self-hosted" endIcon={<ExternalLink />}>
 | 
			
		||||
                    {formatMessage({
 | 
			
		||||
                      id: 'Settings.application.link-pricing',
 | 
			
		||||
                      defaultMessage: 'See all pricing',
 | 
			
		||||
                      defaultMessage: 'See all pricing plans',
 | 
			
		||||
                    })}
 | 
			
		||||
                  </Link>
 | 
			
		||||
                </GridItem>
 | 
			
		||||
 | 
			
		||||
@ -289,14 +289,14 @@ describe('Application page', () => {
 | 
			
		||||
                    <h1
 | 
			
		||||
                      class="c7"
 | 
			
		||||
                    >
 | 
			
		||||
                      Application
 | 
			
		||||
                      Overview
 | 
			
		||||
                    </h1>
 | 
			
		||||
                  </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <p
 | 
			
		||||
                  class="c8"
 | 
			
		||||
                >
 | 
			
		||||
                  See your project's details
 | 
			
		||||
                  Administration panel’s global information
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
@ -312,7 +312,7 @@ describe('Application page', () => {
 | 
			
		||||
                  <h3
 | 
			
		||||
                    class="c12"
 | 
			
		||||
                  >
 | 
			
		||||
                    Information
 | 
			
		||||
                    Details
 | 
			
		||||
                  </h3>
 | 
			
		||||
                  <div
 | 
			
		||||
                    class="c13 c14"
 | 
			
		||||
@ -326,7 +326,7 @@ describe('Application page', () => {
 | 
			
		||||
                        <span
 | 
			
		||||
                          class="c16"
 | 
			
		||||
                        >
 | 
			
		||||
                          details
 | 
			
		||||
                          strapi version
 | 
			
		||||
                        </span>
 | 
			
		||||
                        <p
 | 
			
		||||
                          class="c17"
 | 
			
		||||
@ -334,6 +334,35 @@ describe('Application page', () => {
 | 
			
		||||
                          v
 | 
			
		||||
                          4.0.0
 | 
			
		||||
                        </p>
 | 
			
		||||
                        <a
 | 
			
		||||
                          class="c18"
 | 
			
		||||
                          href="https://support.strapi.io/support/home"
 | 
			
		||||
                          rel="noreferrer noopener"
 | 
			
		||||
                          target="_blank"
 | 
			
		||||
                        >
 | 
			
		||||
                          <span
 | 
			
		||||
                            class="c19"
 | 
			
		||||
                          >
 | 
			
		||||
                            Get help
 | 
			
		||||
                          </span>
 | 
			
		||||
                          <span
 | 
			
		||||
                            aria-hidden="true"
 | 
			
		||||
                            class="c20 c21"
 | 
			
		||||
                          >
 | 
			
		||||
                            <svg
 | 
			
		||||
                              fill="none"
 | 
			
		||||
                              height="1em"
 | 
			
		||||
                              viewBox="0 0 24 24"
 | 
			
		||||
                              width="1em"
 | 
			
		||||
                              xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
                            >
 | 
			
		||||
                              <path
 | 
			
		||||
                                d="M16.235 2.824a1.412 1.412 0 010-2.824h6.353C23.368 0 24 .633 24 1.412v6.353a1.412 1.412 0 01-2.823 0V4.82l-8.179 8.178a1.412 1.412 0 01-1.996-1.996l8.178-8.178h-2.945zm4.942 10.588a1.412 1.412 0 012.823 0v9.176c0 .78-.632 1.412-1.412 1.412H1.412C.632 24 0 23.368 0 22.588V1.412C0 .632.632 0 1.412 0h9.176a1.412 1.412 0 010 2.824H2.824v18.353h18.353v-7.765z"
 | 
			
		||||
                                fill="#32324D"
 | 
			
		||||
                              />
 | 
			
		||||
                            </svg>
 | 
			
		||||
                          </span>
 | 
			
		||||
                        </a>
 | 
			
		||||
                      </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div
 | 
			
		||||
@ -410,7 +439,7 @@ describe('Application page', () => {
 | 
			
		||||
                          <span
 | 
			
		||||
                            class="c19"
 | 
			
		||||
                          >
 | 
			
		||||
                            See all pricing
 | 
			
		||||
                            See all pricing plans
 | 
			
		||||
                          </span>
 | 
			
		||||
                          <span
 | 
			
		||||
                            aria-hidden="true"
 | 
			
		||||
 | 
			
		||||
@ -135,7 +135,7 @@ const EditPage = () => {
 | 
			
		||||
                  <Link startIcon={<ArrowLeft />} to="/settings/roles">
 | 
			
		||||
                    {formatMessage({
 | 
			
		||||
                      id: 'app.components.go-back',
 | 
			
		||||
                      defaultMessage: 'Go back',
 | 
			
		||||
                      defaultMessage: 'Back',
 | 
			
		||||
                    })}
 | 
			
		||||
                  </Link>
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -822,7 +822,7 @@ exports[`<EditPage /> renders and matches the snapshot 1`] = `
 | 
			
		||||
              <span
 | 
			
		||||
                class="c6"
 | 
			
		||||
              >
 | 
			
		||||
                Go back
 | 
			
		||||
                Back
 | 
			
		||||
              </span>
 | 
			
		||||
            </a>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
@ -150,7 +150,7 @@ const EditPage = ({ canUpdate }) => {
 | 
			
		||||
            <Link startIcon={<ArrowLeft />} to="/settings/users?pageSize=10&page=1&sort=firstname">
 | 
			
		||||
              {formatMessage({
 | 
			
		||||
                id: 'app.components.go-back',
 | 
			
		||||
                defaultMessage: 'Go back',
 | 
			
		||||
                defaultMessage: 'Back',
 | 
			
		||||
              })}
 | 
			
		||||
            </Link>
 | 
			
		||||
          }
 | 
			
		||||
@ -194,7 +194,7 @@ const EditPage = ({ canUpdate }) => {
 | 
			
		||||
                  >
 | 
			
		||||
                    {formatMessage({
 | 
			
		||||
                      id: 'app.components.go-back',
 | 
			
		||||
                      defaultMessage: 'Go back',
 | 
			
		||||
                      defaultMessage: 'Back',
 | 
			
		||||
                    })}
 | 
			
		||||
                  </Link>
 | 
			
		||||
                }
 | 
			
		||||
@ -254,7 +254,7 @@ const EditPage = ({ canUpdate }) => {
 | 
			
		||||
                      <Typography variant="delta" as="h2">
 | 
			
		||||
                        {formatMessage({
 | 
			
		||||
                          id: 'app.components.Users.ModalCreateBody.block-title.login',
 | 
			
		||||
                          defaultMessage: 'Login settings',
 | 
			
		||||
                          defaultMessage: "User's role",
 | 
			
		||||
                        })}
 | 
			
		||||
                      </Typography>
 | 
			
		||||
                      <Grid gap={5}>
 | 
			
		||||
 | 
			
		||||
@ -58,7 +58,7 @@ const ModalForm = ({ queryName, onToggle }) => {
 | 
			
		||||
 | 
			
		||||
  const headerTitle = formatMessage({
 | 
			
		||||
    id: 'Settings.permissions.users.create',
 | 
			
		||||
    defaultMessage: 'Create new user',
 | 
			
		||||
    defaultMessage: 'Invite new user',
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  const handleSubmit = async (body, { setErrors }) => {
 | 
			
		||||
@ -118,7 +118,7 @@ const ModalForm = ({ queryName, onToggle }) => {
 | 
			
		||||
                    <Typography variant="beta" as="h2">
 | 
			
		||||
                      {formatMessage({
 | 
			
		||||
                        id: 'app.components.Users.ModalCreateBody.block-title.details',
 | 
			
		||||
                        defaultMessage: 'Details',
 | 
			
		||||
                        defaultMessage: 'User details',
 | 
			
		||||
                      })}
 | 
			
		||||
                    </Typography>
 | 
			
		||||
                    <Box paddingTop={4}>
 | 
			
		||||
@ -147,7 +147,7 @@ const ModalForm = ({ queryName, onToggle }) => {
 | 
			
		||||
                    <Typography variant="beta" as="h2">
 | 
			
		||||
                      {formatMessage({
 | 
			
		||||
                        id: 'app.components.Users.ModalCreateBody.block-title.login',
 | 
			
		||||
                        defaultMessage: 'Login settings',
 | 
			
		||||
                        defaultMessage: "User's role",
 | 
			
		||||
                      })}
 | 
			
		||||
                    </Typography>
 | 
			
		||||
                    <Box paddingTop={4}>
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@ const stepper = {
 | 
			
		||||
  create: {
 | 
			
		||||
    buttonSubmitLabel: {
 | 
			
		||||
      id: 'app.containers.Users.ModalForm.footer.button-success',
 | 
			
		||||
      defaultMessage: 'Create user',
 | 
			
		||||
      defaultMessage: 'Invite user',
 | 
			
		||||
    },
 | 
			
		||||
    isDisabled: false,
 | 
			
		||||
    next: 'magic-link',
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,6 @@ import Envelop from '@strapi/icons/Envelop';
 | 
			
		||||
import { useLocation } from 'react-router-dom';
 | 
			
		||||
import { useIntl } from 'react-intl';
 | 
			
		||||
import { useMutation, useQuery, useQueryClient } from 'react-query';
 | 
			
		||||
import get from 'lodash/get';
 | 
			
		||||
import adminPermissions from '../../../../../permissions';
 | 
			
		||||
import TableRows from './DynamicTable/TableRows';
 | 
			
		||||
import Filters from './Filters';
 | 
			
		||||
@ -73,8 +72,6 @@ const ListPage = () => {
 | 
			
		||||
    setIsModalOpen(prev => !prev);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const total = get(data, 'pagination.total', 0);
 | 
			
		||||
 | 
			
		||||
  const deleteAllMutation = useMutation(ids => deleteData(ids), {
 | 
			
		||||
    onSuccess: async () => {
 | 
			
		||||
      await queryClient.invalidateQueries(queryName);
 | 
			
		||||
@ -104,7 +101,7 @@ const ListPage = () => {
 | 
			
		||||
    >
 | 
			
		||||
      {formatMessage({
 | 
			
		||||
        id: 'Settings.permissions.users.create',
 | 
			
		||||
        defaultMessage: 'Create new user',
 | 
			
		||||
        defaultMessage: 'Invite new user',
 | 
			
		||||
      })}
 | 
			
		||||
    </Button>
 | 
			
		||||
  ) : (
 | 
			
		||||
@ -117,13 +114,10 @@ const ListPage = () => {
 | 
			
		||||
      <HeaderLayout
 | 
			
		||||
        primaryAction={createAction}
 | 
			
		||||
        title={title}
 | 
			
		||||
        subtitle={formatMessage(
 | 
			
		||||
          {
 | 
			
		||||
            id: 'Settings.permissions.users.listview.header.subtitle',
 | 
			
		||||
            defaultMessage: '{number, plural, =0 {# users} one {# user} other {# users}} found',
 | 
			
		||||
          },
 | 
			
		||||
          { number: total }
 | 
			
		||||
        )}
 | 
			
		||||
        subtitle={formatMessage({
 | 
			
		||||
          id: 'Settings.permissions.users.listview.header.subtitle',
 | 
			
		||||
          defaultMessage: 'All the users who have access to the Strapi admin panel',
 | 
			
		||||
        })}
 | 
			
		||||
      />
 | 
			
		||||
      {canRead && (
 | 
			
		||||
        <ActionLayout
 | 
			
		||||
 | 
			
		||||
@ -1127,14 +1127,14 @@ describe('ADMIN | Pages | USERS | ListPage', () => {
 | 
			
		||||
                <span
 | 
			
		||||
                  class="c10 c11"
 | 
			
		||||
                >
 | 
			
		||||
                  Create new user
 | 
			
		||||
                  Invite new user
 | 
			
		||||
                </span>
 | 
			
		||||
              </button>
 | 
			
		||||
            </div>
 | 
			
		||||
            <p
 | 
			
		||||
              class="c12"
 | 
			
		||||
            >
 | 
			
		||||
              0 users found
 | 
			
		||||
              All the users who have access to the Strapi admin panel
 | 
			
		||||
            </p>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
@ -1403,10 +1403,10 @@ describe('ADMIN | Pages | USERS | ListPage', () => {
 | 
			
		||||
                            <span
 | 
			
		||||
                              aria-labelledby="tooltip-11"
 | 
			
		||||
                              class="c37"
 | 
			
		||||
                              label="Active User"
 | 
			
		||||
                              label="User status"
 | 
			
		||||
                              tabindex="-1"
 | 
			
		||||
                            >
 | 
			
		||||
                              Active User
 | 
			
		||||
                              User status
 | 
			
		||||
                            </span>
 | 
			
		||||
                          </span>
 | 
			
		||||
                          <span
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,7 @@ const tableHeaders = [
 | 
			
		||||
  {
 | 
			
		||||
    key: 'isActive',
 | 
			
		||||
    name: 'isActive',
 | 
			
		||||
    metadatas: { label: 'Active User', sortable: false },
 | 
			
		||||
    metadatas: { label: 'User status', sortable: false },
 | 
			
		||||
    // eslint-disable-next-line react/prop-types
 | 
			
		||||
    cellFormatter: ({ isActive }) => {
 | 
			
		||||
      return (
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@ const MagicLink = ({ registrationToken }) => {
 | 
			
		||||
    <MagicLinkWrapper target={target}>
 | 
			
		||||
      {formatMessage({
 | 
			
		||||
        id: 'app.components.Users.MagicLink.connect',
 | 
			
		||||
        defaultMessage: 'Send this link to the user for them to connect.',
 | 
			
		||||
        defaultMessage: 'Copy and share this link to give access to this user',
 | 
			
		||||
      })}
 | 
			
		||||
    </MagicLinkWrapper>
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
@ -44,7 +44,7 @@ const SelectRoles = ({ disabled, error, onChange, value }) => {
 | 
			
		||||
  });
 | 
			
		||||
  const hint = formatMessage({
 | 
			
		||||
    id: 'app.components.Users.ModalCreateBody.block-title.roles.description',
 | 
			
		||||
    defaultMessage: 'Your user can have one or several roles',
 | 
			
		||||
    defaultMessage: 'A user can have one or several roles',
 | 
			
		||||
  });
 | 
			
		||||
  const placeholder = formatMessage({
 | 
			
		||||
    id: 'app.components.Select.placeholder',
 | 
			
		||||
 | 
			
		||||
@ -101,7 +101,7 @@ const HeadersInput = () => {
 | 
			
		||||
                >
 | 
			
		||||
                  {formatMessage({
 | 
			
		||||
                    id: 'Settings.webhooks.create.header',
 | 
			
		||||
                    defaultMessage: 'Create a new header',
 | 
			
		||||
                    defaultMessage: 'Create new header',
 | 
			
		||||
                  })}
 | 
			
		||||
                </TextButton>
 | 
			
		||||
              </GridItem>
 | 
			
		||||
 | 
			
		||||
@ -86,7 +86,7 @@ const WebhookForm = ({
 | 
			
		||||
              <Link startIcon={<ArrowLeft />} to="/settings/webhooks">
 | 
			
		||||
                {formatMessage({
 | 
			
		||||
                  id: 'app.components.go-back',
 | 
			
		||||
                  defaultMessage: 'Go back',
 | 
			
		||||
                  defaultMessage: 'Back',
 | 
			
		||||
                })}
 | 
			
		||||
              </Link>
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -247,7 +247,7 @@ const ListView = () => {
 | 
			
		||||
          title={formatMessage({ id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' })}
 | 
			
		||||
          subtitle={formatMessage({
 | 
			
		||||
            id: 'Settings.webhooks.list.description',
 | 
			
		||||
            defaultMessage: 'Get POST changes notifications.',
 | 
			
		||||
            defaultMessage: 'Get POST changes notifications',
 | 
			
		||||
          })}
 | 
			
		||||
          primaryAction={
 | 
			
		||||
            canCreate &&
 | 
			
		||||
@ -255,7 +255,7 @@ const ListView = () => {
 | 
			
		||||
              <LinkButton startIcon={<Plus />} variant="default" to={`${pathname}/create`} size="L">
 | 
			
		||||
                {formatMessage({
 | 
			
		||||
                  id: 'Settings.webhooks.list.button.add',
 | 
			
		||||
                  defaultMessage: 'Add new webhook',
 | 
			
		||||
                  defaultMessage: 'Create new webhook',
 | 
			
		||||
                })}
 | 
			
		||||
              </LinkButton>
 | 
			
		||||
            )
 | 
			
		||||
@ -305,7 +305,7 @@ const ListView = () => {
 | 
			
		||||
                    >
 | 
			
		||||
                      {formatMessage({
 | 
			
		||||
                        id: 'Settings.webhooks.list.button.add',
 | 
			
		||||
                        defaultMessage: 'Add new webhook',
 | 
			
		||||
                        defaultMessage: 'Create new webhook',
 | 
			
		||||
                      })}
 | 
			
		||||
                    </TFooter>
 | 
			
		||||
                  }
 | 
			
		||||
@ -447,7 +447,7 @@ const ListView = () => {
 | 
			
		||||
                  icon={<EmptyDocuments width="160px" />}
 | 
			
		||||
                  content={formatMessage({
 | 
			
		||||
                    id: 'Settings.webhooks.list.empty.description',
 | 
			
		||||
                    defaultMessage: 'Add your first webhook',
 | 
			
		||||
                    defaultMessage: 'No webhooks found',
 | 
			
		||||
                  })}
 | 
			
		||||
                  action={
 | 
			
		||||
                    <Button
 | 
			
		||||
@ -457,7 +457,7 @@ const ListView = () => {
 | 
			
		||||
                    >
 | 
			
		||||
                      {formatMessage({
 | 
			
		||||
                        id: 'Settings.webhooks.list.button.add',
 | 
			
		||||
                        defaultMessage: 'Add new webhook',
 | 
			
		||||
                        defaultMessage: 'Create new webhook',
 | 
			
		||||
                      })}
 | 
			
		||||
                    </Button>
 | 
			
		||||
                  }
 | 
			
		||||
 | 
			
		||||
@ -811,14 +811,14 @@ describe('Admin | containers | ListView', () => {
 | 
			
		||||
                    <span
 | 
			
		||||
                      class="c12 c13"
 | 
			
		||||
                    >
 | 
			
		||||
                      Add new webhook
 | 
			
		||||
                      Create new webhook
 | 
			
		||||
                    </span>
 | 
			
		||||
                  </a>
 | 
			
		||||
                </div>
 | 
			
		||||
                <p
 | 
			
		||||
                  class="c14"
 | 
			
		||||
                >
 | 
			
		||||
                  Get POST changes notifications.
 | 
			
		||||
                  Get POST changes notifications
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
@ -1263,7 +1263,7 @@ describe('Admin | containers | ListView', () => {
 | 
			
		||||
                        <span
 | 
			
		||||
                          class="c53"
 | 
			
		||||
                        >
 | 
			
		||||
                          Add new webhook
 | 
			
		||||
                          Create new webhook
 | 
			
		||||
                        </span>
 | 
			
		||||
                      </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
@ -91,6 +91,7 @@
 | 
			
		||||
  "Roles.RoleRow.user-count.singular": "{number} user",
 | 
			
		||||
  "Roles.components.List.empty.withSearch": "There is no role corresponding to the search ({search})...",
 | 
			
		||||
  "Settings.PageTitle": "Settings - {name}",
 | 
			
		||||
  "Settings.apiTokens.details": "Details",
 | 
			
		||||
  "Settings.apiTokens.addFirstToken": "Add your first API Token",
 | 
			
		||||
  "Settings.apiTokens.addNewToken": "Add new API Token",
 | 
			
		||||
  "Settings.apiTokens.copy.editMessage": "For security reasons, you can only see your token once.",
 | 
			
		||||
@ -103,15 +104,16 @@
 | 
			
		||||
  "Settings.apiTokens.title": "API Tokens",
 | 
			
		||||
  "Settings.apiTokens.types.full-access": "Full access",
 | 
			
		||||
  "Settings.apiTokens.types.read-only": "Read-only",
 | 
			
		||||
  "Settings.application.description": "See your project's details",
 | 
			
		||||
  "Settings.application.details": "details",
 | 
			
		||||
  "Settings.application.description": "Administration panel’s global information",
 | 
			
		||||
  "Settings.application.strapiVersion": "strapi version",
 | 
			
		||||
  "Settings.application.edition-title": "current plan",
 | 
			
		||||
  "Settings.application.information": "Information",
 | 
			
		||||
  "Settings.application.link-pricing": "See all pricing",
 | 
			
		||||
  "Settings.application.details": "Details",
 | 
			
		||||
  "Settings.application.link-pricing": "See all pricing plans",
 | 
			
		||||
  "Settings.application.link-upgrade": "Upgrade your admin panel",
 | 
			
		||||
  "Settings.application.get-help": "Get help",
 | 
			
		||||
  "Settings.application.node-version": "node version",
 | 
			
		||||
  "Settings.application.strapi-version": "strapi version",
 | 
			
		||||
  "Settings.application.title": "Application",
 | 
			
		||||
  "Settings.application.title": "Overview",
 | 
			
		||||
  "Settings.error": "Error",
 | 
			
		||||
  "Settings.global": "Global Settings",
 | 
			
		||||
  "Settings.permissions": "Administration panel",
 | 
			
		||||
@ -132,13 +134,13 @@
 | 
			
		||||
  "Settings.permissions.menu.link.users.label": "Users",
 | 
			
		||||
  "Settings.permissions.select-all-by-permission": "Select all {label} permissions",
 | 
			
		||||
  "Settings.permissions.select-by-permission": "Select {label} permission",
 | 
			
		||||
  "Settings.permissions.users.create": "Create new user",
 | 
			
		||||
  "Settings.permissions.users.create": "Invite new user",
 | 
			
		||||
  "Settings.permissions.users.form.email": "Email",
 | 
			
		||||
  "Settings.permissions.users.form.firstname": "First name",
 | 
			
		||||
  "Settings.permissions.users.form.lastname": "Last name",
 | 
			
		||||
  "Settings.permissions.users.form.sso": "Connect with SSO",
 | 
			
		||||
  "Settings.permissions.users.form.sso.description": "When enabled (ON), users can login via SSO",
 | 
			
		||||
  "Settings.permissions.users.listview.header.subtitle": "{number, plural, =0 {# users} one {# user } other {# users}} found",
 | 
			
		||||
  "Settings.permissions.users.listview.header.subtitle": "All the users who have access to the Strapi admin panel",
 | 
			
		||||
  "Settings.permissions.users.listview.header.title": "Users",
 | 
			
		||||
  "Settings.permissions.users.tabs.label": "Tabs Permissions",
 | 
			
		||||
  "Settings.profile.form.notify.data.loaded": "Your profile data has been loaded",
 | 
			
		||||
@ -188,7 +190,7 @@
 | 
			
		||||
  "Settings.sso.form.settings.title": "Settings",
 | 
			
		||||
  "Settings.sso.title": "Single Sign-On",
 | 
			
		||||
  "Settings.webhooks.create": "Create a webhook",
 | 
			
		||||
  "Settings.webhooks.create.header": "Create a new header",
 | 
			
		||||
  "Settings.webhooks.create.header": "Create new header",
 | 
			
		||||
  "Settings.webhooks.created": "Webhook created",
 | 
			
		||||
  "Settings.webhooks.disabled": "Disabled",
 | 
			
		||||
  "Settings.webhooks.enabled": "Enabled",
 | 
			
		||||
@ -203,9 +205,9 @@
 | 
			
		||||
  "Settings.webhooks.headers.remove": "Remove header row {number}",
 | 
			
		||||
  "Settings.webhooks.key": "Key",
 | 
			
		||||
  "Settings.webhooks.list.all-entries.select": "Select all entries",
 | 
			
		||||
  "Settings.webhooks.list.button.add": "Add new webhook",
 | 
			
		||||
  "Settings.webhooks.list.description": "Get POST changes notifications.",
 | 
			
		||||
  "Settings.webhooks.list.empty.description": "Add your first webhook",
 | 
			
		||||
  "Settings.webhooks.list.button.add": "Create new webhook",
 | 
			
		||||
  "Settings.webhooks.list.description": "Get POST changes notifications",
 | 
			
		||||
  "Settings.webhooks.list.empty.description": "No webhooks found",
 | 
			
		||||
  "Settings.webhooks.list.empty.link": "See our documentation",
 | 
			
		||||
  "Settings.webhooks.list.empty.title": "There are no webhooks yet",
 | 
			
		||||
  "Settings.webhooks.list.select": "Select",
 | 
			
		||||
@ -255,6 +257,7 @@
 | 
			
		||||
  "app.components.DownloadInfo.text": "This could take a minute. Thanks for your patience.",
 | 
			
		||||
  "app.components.EmptyAttributes.title": "There are no fields yet",
 | 
			
		||||
  "app.components.EmptyStateLayout.content-permissions": "You don't have the permissions to access that content",
 | 
			
		||||
  "app.components.EmptyStateLayout.content-document": "No content found",
 | 
			
		||||
  "app.components.HeaderLayout.link.go-back": "Back",
 | 
			
		||||
  "app.components.HomePage.button.blog": "See more on the blog",
 | 
			
		||||
  "app.components.HomePage.community": "Join the community",
 | 
			
		||||
@ -326,12 +329,12 @@
 | 
			
		||||
  "app.components.UpgradePlanModal.text-ee": "Enterprise Edition",
 | 
			
		||||
  "app.components.UpgradePlanModal.text-power": "Unlock the full power of Strapi by upgrading your plan to the Enterprise Edition",
 | 
			
		||||
  "app.components.UpgradePlanModal.text-strapi": "of Strapi by upgrading your plan to the",
 | 
			
		||||
  "app.components.Users.MagicLink.connect": "Send this link to the user for them to connect.",
 | 
			
		||||
  "app.components.Users.MagicLink.connect": "Copy and share this link to give access to this user",
 | 
			
		||||
  "app.components.Users.MagicLink.connect.sso": "Send this link to the user, the first login can be made via a SSO provider",
 | 
			
		||||
  "app.components.Users.ModalCreateBody.block-title.details": "Details",
 | 
			
		||||
  "app.components.Users.ModalCreateBody.block-title.login": "Login settings",
 | 
			
		||||
  "app.components.Users.ModalCreateBody.block-title.details": "User details",
 | 
			
		||||
  "app.components.Users.ModalCreateBody.block-title.login": "Roles",
 | 
			
		||||
  "app.components.Users.ModalCreateBody.block-title.roles": "User's roles",
 | 
			
		||||
  "app.components.Users.ModalCreateBody.block-title.roles.description": "Your user can have one or several roles",
 | 
			
		||||
  "app.components.Users.ModalCreateBody.block-title.roles.description": "A user can have one or several roles",
 | 
			
		||||
  "app.components.Users.SortPicker.button-label": "Sort by",
 | 
			
		||||
  "app.components.Users.SortPicker.sortby.email_asc": "Email (A to Z)",
 | 
			
		||||
  "app.components.Users.SortPicker.sortby.email_desc": "Email (Z to A)",
 | 
			
		||||
@ -341,7 +344,7 @@
 | 
			
		||||
  "app.components.Users.SortPicker.sortby.lastname_desc": "Last name (Z to A)",
 | 
			
		||||
  "app.components.Users.SortPicker.sortby.username_asc": "Username (A to Z)",
 | 
			
		||||
  "app.components.Users.SortPicker.sortby.username_desc": "Username (Z to A)",
 | 
			
		||||
  "app.components.go-back": "Go back",
 | 
			
		||||
  "app.components.go-back": "Back",
 | 
			
		||||
  "app.components.listPlugins.button": "Add New Plugin",
 | 
			
		||||
  "app.components.listPlugins.title.none": "No plugins installed",
 | 
			
		||||
  "app.components.listPlugins.title.plural": "{number} plugins are installed",
 | 
			
		||||
@ -355,7 +358,7 @@
 | 
			
		||||
  "app.containers.Users.EditPage.header.label": "Edit {name}",
 | 
			
		||||
  "app.containers.Users.EditPage.header.label-loading": "Edit user",
 | 
			
		||||
  "app.containers.Users.EditPage.roles-bloc-title": "Attributed roles",
 | 
			
		||||
  "app.containers.Users.ModalForm.footer.button-success": "Create user",
 | 
			
		||||
  "app.containers.Users.ModalForm.footer.button-success": "Invite user",
 | 
			
		||||
  "app.links.configure-view": "Configure the view",
 | 
			
		||||
  "app.static.links.cheatsheet": "CheatSheet",
 | 
			
		||||
  "app.utils.SelectOption.defaultMessage": " ",
 | 
			
		||||
@ -451,7 +454,7 @@
 | 
			
		||||
  "content-manager.App.schemas.data-loaded": "The schemas have been successfully loaded",
 | 
			
		||||
  "content-manager.DynamicTable.relation-loaded": "The relations have been loaded",
 | 
			
		||||
  "content-manager.EditRelations.title": "Relational data",
 | 
			
		||||
  "content-manager.HeaderLayout.button.label-add-entry": "Add new entry",
 | 
			
		||||
  "content-manager.HeaderLayout.button.label-add-entry": "Create new entry",
 | 
			
		||||
  "content-manager.api.id": "API ID",
 | 
			
		||||
  "content-manager.components.AddFilterCTA.add": "Filters",
 | 
			
		||||
  "content-manager.components.AddFilterCTA.hide": "Filters",
 | 
			
		||||
@ -481,8 +484,8 @@
 | 
			
		||||
  "content-manager.components.FiltersPickWrapper.PluginHeader.title.filter": "Filters",
 | 
			
		||||
  "content-manager.components.FiltersPickWrapper.hide": "Hide",
 | 
			
		||||
  "content-manager.components.LeftMenu.Search.label": "Search for a content type",
 | 
			
		||||
  "content-manager.components.LeftMenu.collection-types": "{number, plural, =0 {Collection Types} one {Collection Type } other {Collection Types}}",
 | 
			
		||||
  "content-manager.components.LeftMenu.single-types": "{number, plural, =0 {Single Types} one {Single Type } other {Single Types}}",
 | 
			
		||||
  "content-manager.components.LeftMenu.collection-types": "Collection Types",
 | 
			
		||||
  "content-manager.components.LeftMenu.single-types": "Single Types",
 | 
			
		||||
  "content-manager.components.LimitSelect.itemsPerPage": "Items per page",
 | 
			
		||||
  "content-manager.components.NotAllowedInput.text": "No permissions to see this field",
 | 
			
		||||
  "content-manager.components.RepeatableComponent.error-message": "The component(s) contain error(s)",
 | 
			
		||||
@ -649,7 +652,7 @@
 | 
			
		||||
  "form.button.save": "Save",
 | 
			
		||||
  "global.prompt.unsaved": "Are you sure you want to leave this page? All your modifications will be lost",
 | 
			
		||||
  "notification.contentType.relations.conflict": "Content type has conflicting relations",
 | 
			
		||||
  "notification.default.title": "Information Alert:",
 | 
			
		||||
  "notification.default.title": "Information:",
 | 
			
		||||
  "notification.error": "An error occurred",
 | 
			
		||||
  "notification.error.layout": "Couldn't retrieve the layout",
 | 
			
		||||
  "notification.form.error.fields": "The form contains some errors",
 | 
			
		||||
@ -658,10 +661,10 @@
 | 
			
		||||
  "notification.permission.not-allowed-read": "You are not allowed to see this document",
 | 
			
		||||
  "notification.success.delete": "The item has been deleted",
 | 
			
		||||
  "notification.success.saved": "Saved",
 | 
			
		||||
  "notification.success.title": "Success Alert:",
 | 
			
		||||
  "notification.success.title": "Success:",
 | 
			
		||||
  "notification.version.update.link": "See more",
 | 
			
		||||
  "notification.version.update.message": "A new version of Strapi is available!",
 | 
			
		||||
  "notification.warning.title": "Warning Alert:",
 | 
			
		||||
  "notification.warning.title": "Warning:",
 | 
			
		||||
  "or": "OR",
 | 
			
		||||
  "request.error.model.unknown": "This model doesn't exist",
 | 
			
		||||
  "skipToContent": "Skip to content",
 | 
			
		||||
 | 
			
		||||
@ -164,7 +164,7 @@ const CreatePage = () => {
 | 
			
		||||
                  <Link startIcon={<ArrowLeft />} to="/settings/roles">
 | 
			
		||||
                    {formatMessage({
 | 
			
		||||
                      id: 'app.components.go-back',
 | 
			
		||||
                      defaultMessage: 'Go back',
 | 
			
		||||
                      defaultMessage: 'Back',
 | 
			
		||||
                    })}
 | 
			
		||||
                  </Link>
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -828,7 +828,7 @@ exports[`<CreatePage /> renders and matches the snapshot 1`] = `
 | 
			
		||||
              <span
 | 
			
		||||
                class="c6"
 | 
			
		||||
              >
 | 
			
		||||
                Go back
 | 
			
		||||
                Back
 | 
			
		||||
              </span>
 | 
			
		||||
            </a>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,7 @@ const MagicLink = ({ registrationToken }) => {
 | 
			
		||||
      >
 | 
			
		||||
        {formatMessage({
 | 
			
		||||
          id: 'app.components.Users.MagicLink.connect',
 | 
			
		||||
          defaultMessage: 'Send this link to the user for them to connect.',
 | 
			
		||||
          defaultMessage: 'Copy and share this link to give access to this user',
 | 
			
		||||
        })}
 | 
			
		||||
      </MagicLinkWrapper>
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,7 @@ const ContentTypeBuilderNav = () => {
 | 
			
		||||
      />
 | 
			
		||||
      <SubNavSections>
 | 
			
		||||
        {menu.map(section => {
 | 
			
		||||
          const title = `${section.title.id}${section.links.length > 1 ? 'plural' : 'singular'}`;
 | 
			
		||||
          const title = section.title.id;
 | 
			
		||||
 | 
			
		||||
          return (
 | 
			
		||||
            <React.Fragment key={section.name}>
 | 
			
		||||
 | 
			
		||||
@ -597,7 +597,7 @@ exports[`<ContentTypeBuilderNav /> renders and matches the snapshot 1`] = `
 | 
			
		||||
                    <span
 | 
			
		||||
                      class="c4 c20"
 | 
			
		||||
                    >
 | 
			
		||||
                      content-type-builder.menu.section.models.name.plural
 | 
			
		||||
                      content-type-builder.menu.section.models.name.
 | 
			
		||||
                    </span>
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <div
 | 
			
		||||
@ -756,7 +756,7 @@ exports[`<ContentTypeBuilderNav /> renders and matches the snapshot 1`] = `
 | 
			
		||||
                    <span
 | 
			
		||||
                      class="c4 c20"
 | 
			
		||||
                    >
 | 
			
		||||
                      content-type-builder.menu.section.single-types.name.singular
 | 
			
		||||
                      content-type-builder.menu.section.single-types.name.
 | 
			
		||||
                    </span>
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <div
 | 
			
		||||
@ -880,7 +880,7 @@ exports[`<ContentTypeBuilderNav /> renders and matches the snapshot 1`] = `
 | 
			
		||||
                    <span
 | 
			
		||||
                      class="c4 c20"
 | 
			
		||||
                    >
 | 
			
		||||
                      content-type-builder.menu.section.components.name.plural
 | 
			
		||||
                      content-type-builder.menu.section.components.name.
 | 
			
		||||
                    </span>
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <div
 | 
			
		||||
 | 
			
		||||
@ -123,7 +123,7 @@ const useContentTypeBuilderMenu = () => {
 | 
			
		||||
    {
 | 
			
		||||
      name: 'models',
 | 
			
		||||
      title: {
 | 
			
		||||
        id: `${getTrad('menu.section.models.name.')}`,
 | 
			
		||||
        id: `${getTrad('menu.section.models.name.plural')}`,
 | 
			
		||||
        defaultMessage: 'Collection Types',
 | 
			
		||||
      },
 | 
			
		||||
      customLink: isInDevelopmentMode && {
 | 
			
		||||
@ -136,7 +136,7 @@ const useContentTypeBuilderMenu = () => {
 | 
			
		||||
    {
 | 
			
		||||
      name: 'singleTypes',
 | 
			
		||||
      title: {
 | 
			
		||||
        id: `${getTrad('menu.section.single-types.name.')}`,
 | 
			
		||||
        id: `${getTrad('menu.section.single-types.name.plural')}`,
 | 
			
		||||
        defaultMessage: 'Single Types',
 | 
			
		||||
      },
 | 
			
		||||
      customLink: isInDevelopmentMode && {
 | 
			
		||||
@ -149,7 +149,7 @@ const useContentTypeBuilderMenu = () => {
 | 
			
		||||
    {
 | 
			
		||||
      name: 'components',
 | 
			
		||||
      title: {
 | 
			
		||||
        id: `${getTrad('menu.section.components.name.')}`,
 | 
			
		||||
        id: `${getTrad('menu.section.components.name.plural')}`,
 | 
			
		||||
        defaultMessage: 'Components',
 | 
			
		||||
      },
 | 
			
		||||
      customLink: {
 | 
			
		||||
 | 
			
		||||
@ -157,13 +157,13 @@ const ListView = () => {
 | 
			
		||||
        title={upperFirst(label)}
 | 
			
		||||
        subtitle={formatMessage({
 | 
			
		||||
          id: getTrad('listView.headerLayout.description'),
 | 
			
		||||
          defaultMessage: 'Build the data architecture of your content.',
 | 
			
		||||
          defaultMessage: 'Build the data architecture of your content',
 | 
			
		||||
        })}
 | 
			
		||||
        navigationAction={
 | 
			
		||||
          <Link startIcon={<ArrowLeft />} to="/plugins/content-type-builder/">
 | 
			
		||||
            {formatMessage({
 | 
			
		||||
              id: 'app.components.go-back',
 | 
			
		||||
              defaultMessage: 'Go back',
 | 
			
		||||
              defaultMessage: 'Back',
 | 
			
		||||
            })}
 | 
			
		||||
          </Link>
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -1216,7 +1216,7 @@ exports[`<ListView /> renders and matches the snapshot 1`] = `
 | 
			
		||||
          <span
 | 
			
		||||
            class="c5"
 | 
			
		||||
          >
 | 
			
		||||
            Go back
 | 
			
		||||
            Back
 | 
			
		||||
          </span>
 | 
			
		||||
        </a>
 | 
			
		||||
      </div>
 | 
			
		||||
@ -1330,7 +1330,7 @@ exports[`<ListView /> renders and matches the snapshot 1`] = `
 | 
			
		||||
      <p
 | 
			
		||||
        class="c21"
 | 
			
		||||
      >
 | 
			
		||||
        Build the data architecture of your content.
 | 
			
		||||
        Build the data architecture of your content
 | 
			
		||||
      </p>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
@ -134,7 +134,7 @@
 | 
			
		||||
  "form.button.single-type.description": "Best for single instance like about us, homepage, etc.",
 | 
			
		||||
  "form.contentType.divider.draft-publish": "Draft/Publish",
 | 
			
		||||
  "from": "from",
 | 
			
		||||
  "listView.headerLayout.description": "Build the data architecture of your content.",
 | 
			
		||||
  "listView.headerLayout.description": "Build the data architecture of your content",
 | 
			
		||||
  "menu.section.components.name.plural": "Components",
 | 
			
		||||
  "menu.section.components.name.singular": "Component",
 | 
			
		||||
  "menu.section.models.name.plural": "Collection Types",
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@ export default {
 | 
			
		||||
      [
 | 
			
		||||
        {
 | 
			
		||||
          intlLabel: {
 | 
			
		||||
            id: getTrad('SettingsNav.link.settings'),
 | 
			
		||||
            id: getTrad('Settings.email.plugin.title'),
 | 
			
		||||
            defaultMessage: 'Settings',
 | 
			
		||||
          },
 | 
			
		||||
          id: 'settings',
 | 
			
		||||
 | 
			
		||||
@ -50,7 +50,7 @@ const Configuration = ({ config }) => {
 | 
			
		||||
            name="shipper-email"
 | 
			
		||||
            label={formatMessage({
 | 
			
		||||
              id: getTrad('Settings.email.plugin.label.defaultFrom'),
 | 
			
		||||
              defaultMessage: 'Default shipper email',
 | 
			
		||||
              defaultMessage: 'Default sender email',
 | 
			
		||||
            })}
 | 
			
		||||
            placeholder={formatMessage({
 | 
			
		||||
              id: getTrad('Settings.email.plugin.placeholder.defaultFrom'),
 | 
			
		||||
 | 
			
		||||
@ -12,18 +12,18 @@ const EmailHeader = () => {
 | 
			
		||||
      <SettingsPageTitle
 | 
			
		||||
        name={formatMessage({
 | 
			
		||||
          id: getTrad('Settings.email.plugin.title'),
 | 
			
		||||
          defaultMessage: 'Email settings',
 | 
			
		||||
          defaultMessage: 'Configuration',
 | 
			
		||||
        })}
 | 
			
		||||
      />
 | 
			
		||||
      <HeaderLayout
 | 
			
		||||
        id="title"
 | 
			
		||||
        title={formatMessage({
 | 
			
		||||
          id: getTrad('Settings.email.plugin.title'),
 | 
			
		||||
          defaultMessage: 'Email settings',
 | 
			
		||||
          defaultMessage: 'Configuration',
 | 
			
		||||
        })}
 | 
			
		||||
        subtitle={formatMessage({
 | 
			
		||||
          id: getTrad('Settings.email.plugin.subTitle'),
 | 
			
		||||
          defaultMessage: 'Test the settings for the email plugin',
 | 
			
		||||
          defaultMessage: 'Test the settings for the Email plugin',
 | 
			
		||||
        })}
 | 
			
		||||
      />
 | 
			
		||||
    </>
 | 
			
		||||
 | 
			
		||||
@ -43,6 +43,7 @@ const SettingsPage = () => {
 | 
			
		||||
  const [isLoading, setIsLoading] = useState(false);
 | 
			
		||||
  const [isSubmitting, setIsSubmitting] = useState(false);
 | 
			
		||||
  const [testAddress, setTestAddress] = useState('');
 | 
			
		||||
  const [isTestAddressValid, setIsTestAddressValid] = useState(false);
 | 
			
		||||
  const [config, setConfig] = useState({
 | 
			
		||||
    provider: '',
 | 
			
		||||
    settings: { defaultFrom: '', defaultReplyTo: '', testAddress: '' },
 | 
			
		||||
@ -87,6 +88,13 @@ const SettingsPage = () => {
 | 
			
		||||
    }
 | 
			
		||||
  }, [formErrors]);
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    schema
 | 
			
		||||
      .validate({ email: testAddress }, { abortEarly: false })
 | 
			
		||||
      .then(() => setIsTestAddressValid(true))
 | 
			
		||||
      .catch(() => setIsTestAddressValid(false));
 | 
			
		||||
  }, [testAddress]);
 | 
			
		||||
 | 
			
		||||
  const handleChange = e => {
 | 
			
		||||
    setTestAddress(() => e.target.value);
 | 
			
		||||
  };
 | 
			
		||||
@ -186,7 +194,7 @@ const SettingsPage = () => {
 | 
			
		||||
                      onChange={handleChange}
 | 
			
		||||
                      label={formatMessage({
 | 
			
		||||
                        id: getTrad('Settings.email.plugin.label.testAddress'),
 | 
			
		||||
                        defaultMessage: 'Test delivery email address',
 | 
			
		||||
                        defaultMessage: 'Recipient email',
 | 
			
		||||
                      })}
 | 
			
		||||
                      value={testAddress}
 | 
			
		||||
                      error={
 | 
			
		||||
@ -203,8 +211,13 @@ const SettingsPage = () => {
 | 
			
		||||
                    />
 | 
			
		||||
                  </GridItem>
 | 
			
		||||
                  <GridItem col={7} s={12}>
 | 
			
		||||
                    <Button loading={isSubmitting} type="submit" startIcon={<Envelop />}>
 | 
			
		||||
                      Test email
 | 
			
		||||
                    <Button
 | 
			
		||||
                      loading={isSubmitting}
 | 
			
		||||
                      disabled={!isTestAddressValid}
 | 
			
		||||
                      type="submit"
 | 
			
		||||
                      startIcon={<Envelop />}
 | 
			
		||||
                    >
 | 
			
		||||
                      Send test email
 | 
			
		||||
                    </Button>
 | 
			
		||||
                  </GridItem>
 | 
			
		||||
                </Grid>
 | 
			
		||||
 | 
			
		||||
@ -42,7 +42,7 @@ describe('Email | Pages | Settings', () => {
 | 
			
		||||
    const { container } = render(App);
 | 
			
		||||
 | 
			
		||||
    await waitFor(() => {
 | 
			
		||||
      expect(screen.getByText('Test delivery email address')).toBeInTheDocument();
 | 
			
		||||
      expect(screen.getByText('Recipient email')).toBeInTheDocument();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    expect(container.firstChild).toMatchInlineSnapshot(`
 | 
			
		||||
@ -722,14 +722,14 @@ describe('Email | Pages | Settings', () => {
 | 
			
		||||
                  class="c4"
 | 
			
		||||
                  id="title"
 | 
			
		||||
                >
 | 
			
		||||
                  Email settings
 | 
			
		||||
                  Configuration
 | 
			
		||||
                </h1>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <p
 | 
			
		||||
              class="c5"
 | 
			
		||||
            >
 | 
			
		||||
              Test the settings for the email plugin
 | 
			
		||||
              Test the settings for the Email plugin
 | 
			
		||||
            </p>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
@ -789,7 +789,7 @@ describe('Email | Pages | Settings', () => {
 | 
			
		||||
                                  class="c17"
 | 
			
		||||
                                  for="textinput-3"
 | 
			
		||||
                                >
 | 
			
		||||
                                  Default shipper email
 | 
			
		||||
                                  Default sender email
 | 
			
		||||
                                </label>
 | 
			
		||||
                              </div>
 | 
			
		||||
                              <div
 | 
			
		||||
@ -967,7 +967,7 @@ describe('Email | Pages | Settings', () => {
 | 
			
		||||
                                  class="c17"
 | 
			
		||||
                                  for="test-address-input"
 | 
			
		||||
                                >
 | 
			
		||||
                                  Test delivery email address
 | 
			
		||||
                                  Recipient email
 | 
			
		||||
                                </label>
 | 
			
		||||
                              </div>
 | 
			
		||||
                              <div
 | 
			
		||||
@ -995,8 +995,9 @@ describe('Email | Pages | Settings', () => {
 | 
			
		||||
                        class=""
 | 
			
		||||
                      >
 | 
			
		||||
                        <button
 | 
			
		||||
                          aria-disabled="false"
 | 
			
		||||
                          aria-disabled="true"
 | 
			
		||||
                          class="c36 c37"
 | 
			
		||||
                          disabled=""
 | 
			
		||||
                          type="submit"
 | 
			
		||||
                        >
 | 
			
		||||
                          <div
 | 
			
		||||
@ -1027,7 +1028,7 @@ describe('Email | Pages | Settings', () => {
 | 
			
		||||
                          <span
 | 
			
		||||
                            class="c41 c42"
 | 
			
		||||
                          >
 | 
			
		||||
                            Test email
 | 
			
		||||
                            Send test email
 | 
			
		||||
                          </span>
 | 
			
		||||
                        </button>
 | 
			
		||||
                      </div>
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "Settings.email.plugin.button.test-email": "Test email",
 | 
			
		||||
  "Settings.email.plugin.label.defaultFrom": "Default shipper email",
 | 
			
		||||
  "Settings.email.plugin.button.test-email": "Send test email",
 | 
			
		||||
  "Settings.email.plugin.label.defaultFrom": "Default sender email",
 | 
			
		||||
  "Settings.email.plugin.label.defaultReplyTo": "Default response  email",
 | 
			
		||||
  "Settings.email.plugin.label.provider": "Email provider",
 | 
			
		||||
  "Settings.email.plugin.label.testAddress": "Test delivery email address",
 | 
			
		||||
  "Settings.email.plugin.label.testAddress": "Recipient email",
 | 
			
		||||
  "Settings.email.plugin.notification.config.error": "Failed to retrieve the email config",
 | 
			
		||||
  "Settings.email.plugin.notification.data.loaded": "Email settings data has been loaded",
 | 
			
		||||
  "Settings.email.plugin.notification.test.error": "Failed to send a test mail to {to}",
 | 
			
		||||
@ -11,11 +11,11 @@
 | 
			
		||||
  "Settings.email.plugin.placeholder.defaultFrom": "ex: Strapi No-Reply <no-reply@strapi.io>",
 | 
			
		||||
  "Settings.email.plugin.placeholder.defaultReplyTo": "ex: Strapi <example@strapi.io>",
 | 
			
		||||
  "Settings.email.plugin.placeholder.testAddress": "ex: developer@example.com",
 | 
			
		||||
  "Settings.email.plugin.subTitle": "Test the settings for the email plugin",
 | 
			
		||||
  "Settings.email.plugin.subTitle": "Test the settings for the Email plugin",
 | 
			
		||||
  "Settings.email.plugin.text.configuration": "The plugin is configured through the {file} file, checkout this {link} for the documentation.",
 | 
			
		||||
  "Settings.email.plugin.title": "Email settings",
 | 
			
		||||
  "Settings.email.plugin.title": "Configuration",
 | 
			
		||||
  "Settings.email.plugin.title.config": "Configuration",
 | 
			
		||||
  "Settings.email.plugin.title.test": "Send a test email",
 | 
			
		||||
  "Settings.email.plugin.title.test": "Send test email",
 | 
			
		||||
  "SettingsNav.link.settings": "Settings",
 | 
			
		||||
  "SettingsNav.section-label": "Email plugin",
 | 
			
		||||
  "components.Input.error.validation.email": "This is an invalid email"
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,7 @@ const Table = ({
 | 
			
		||||
  children,
 | 
			
		||||
  contentType,
 | 
			
		||||
  components,
 | 
			
		||||
  action,
 | 
			
		||||
  headers,
 | 
			
		||||
  isLoading,
 | 
			
		||||
  onConfirmDeleteAll,
 | 
			
		||||
@ -168,7 +169,12 @@ const Table = ({
 | 
			
		||||
          withBulkActions={withBulkActions}
 | 
			
		||||
        />
 | 
			
		||||
        {!rows.length || isLoading ? (
 | 
			
		||||
          <EmptyBodyTable colSpan={COL_COUNT} content={content} isLoading={isLoading} />
 | 
			
		||||
          <EmptyBodyTable
 | 
			
		||||
            colSpan={COL_COUNT}
 | 
			
		||||
            content={content}
 | 
			
		||||
            isLoading={isLoading}
 | 
			
		||||
            action={action}
 | 
			
		||||
          />
 | 
			
		||||
        ) : (
 | 
			
		||||
          Children.toArray(children).map(child =>
 | 
			
		||||
            cloneElement(child, {
 | 
			
		||||
@ -206,6 +212,7 @@ Table.defaultProps = {
 | 
			
		||||
    ConfirmDialogDeleteAll: undefined,
 | 
			
		||||
    ConfirmDialogDelete: undefined,
 | 
			
		||||
  },
 | 
			
		||||
  action: undefined,
 | 
			
		||||
  headers: [],
 | 
			
		||||
  isLoading: false,
 | 
			
		||||
  onConfirmDeleteAll: () => {},
 | 
			
		||||
@ -223,6 +230,7 @@ Table.propTypes = {
 | 
			
		||||
    ConfirmDialogDelete: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
 | 
			
		||||
    ConfirmDialogDeleteAll: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
 | 
			
		||||
  }),
 | 
			
		||||
  action: PropTypes.node,
 | 
			
		||||
  headers: PropTypes.arrayOf(
 | 
			
		||||
    PropTypes.shape({
 | 
			
		||||
      cellFormatter: PropTypes.func,
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@ EmptyStateLayout.defaultProps = {
 | 
			
		||||
  action: undefined,
 | 
			
		||||
  content: {
 | 
			
		||||
    id: 'app.components.EmptyStateLayout.content-document',
 | 
			
		||||
    defaultMessage: "You don't have any content yet...",
 | 
			
		||||
    defaultMessage: 'No content found',
 | 
			
		||||
    values: {},
 | 
			
		||||
  },
 | 
			
		||||
  hasRadius: true,
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ const NoContent = ({ content, ...rest }) => {
 | 
			
		||||
NoContent.defaultProps = {
 | 
			
		||||
  content: {
 | 
			
		||||
    id: 'app.components.EmptyStateLayout.content-document',
 | 
			
		||||
    defaultMessage: "You don't have any content yet...",
 | 
			
		||||
    defaultMessage: 'No content found',
 | 
			
		||||
    values: {},
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -124,7 +124,7 @@ export const SettingsPage = () => {
 | 
			
		||||
        <HeaderLayout
 | 
			
		||||
          title={formatMessage({
 | 
			
		||||
            id: getTrad('settings.header.label'),
 | 
			
		||||
            defaultMessage: 'Media Library - Settings',
 | 
			
		||||
            defaultMessage: 'Media Library',
 | 
			
		||||
          })}
 | 
			
		||||
          primaryAction={
 | 
			
		||||
            <Button
 | 
			
		||||
@ -143,7 +143,7 @@ export const SettingsPage = () => {
 | 
			
		||||
          }
 | 
			
		||||
          subtitle={formatMessage({
 | 
			
		||||
            id: getTrad('settings.sub-header.label'),
 | 
			
		||||
            defaultMessage: 'Configure the settings for the media library',
 | 
			
		||||
            defaultMessage: 'Configure the settings for the Media Library',
 | 
			
		||||
          })}
 | 
			
		||||
        />
 | 
			
		||||
        <ContentLayout>
 | 
			
		||||
@ -157,8 +157,8 @@ export const SettingsPage = () => {
 | 
			
		||||
                    <Flex>
 | 
			
		||||
                      <Typography variant="delta" as="h2">
 | 
			
		||||
                        {formatMessage({
 | 
			
		||||
                          id: getTrad('settings.section.image.label'),
 | 
			
		||||
                          defaultMessage: 'Image',
 | 
			
		||||
                          id: getTrad('settings.blockTitle'),
 | 
			
		||||
                          defaultMessage: 'Asset management',
 | 
			
		||||
                        })}
 | 
			
		||||
                      </Typography>
 | 
			
		||||
                    </Flex>
 | 
			
		||||
@ -171,11 +171,11 @@ export const SettingsPage = () => {
 | 
			
		||||
                          hint={formatMessage({
 | 
			
		||||
                            id: getTrad('settings.form.responsiveDimensions.description'),
 | 
			
		||||
                            defaultMessage:
 | 
			
		||||
                              'It automatically generates multiple formats (large, medium, small) of the uploaded asset',
 | 
			
		||||
                              'Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.',
 | 
			
		||||
                          })}
 | 
			
		||||
                          label={formatMessage({
 | 
			
		||||
                            id: getTrad('settings.form.responsiveDimensions.label'),
 | 
			
		||||
                            defaultMessage: 'Enable responsive friendly upload',
 | 
			
		||||
                            defaultMessage: 'Responsive friendly upload',
 | 
			
		||||
                          })}
 | 
			
		||||
                          name="responsiveDimensions"
 | 
			
		||||
                          offLabel={formatMessage({
 | 
			
		||||
@ -198,9 +198,14 @@ export const SettingsPage = () => {
 | 
			
		||||
                          aria-label="sizeOptimization"
 | 
			
		||||
                          data-testid="sizeOptimization"
 | 
			
		||||
                          checked={modifiedData.sizeOptimization}
 | 
			
		||||
                          hint={formatMessage({
 | 
			
		||||
                            id: getTrad('settings.form.sizeOptimization.description'),
 | 
			
		||||
                            defaultMessage:
 | 
			
		||||
                              'Enabling this option will optimize the file size without compromising on the quality.',
 | 
			
		||||
                          })}
 | 
			
		||||
                          label={formatMessage({
 | 
			
		||||
                            id: getTrad('settings.form.sizeOptimization.label'),
 | 
			
		||||
                            defaultMessage: 'Enable size optimization (without quality loss)',
 | 
			
		||||
                            defaultMessage: 'Size optimization',
 | 
			
		||||
                          })}
 | 
			
		||||
                          name="sizeOptimization"
 | 
			
		||||
                          offLabel={formatMessage({
 | 
			
		||||
@ -226,11 +231,11 @@ export const SettingsPage = () => {
 | 
			
		||||
                          hint={formatMessage({
 | 
			
		||||
                            id: getTrad('settings.form.autoOrientation.description'),
 | 
			
		||||
                            defaultMessage:
 | 
			
		||||
                              'Automatically rotate image according to EXIF orientation tag',
 | 
			
		||||
                              'Enabling this option will automatically rotate the image according to EXIF orientation tag.',
 | 
			
		||||
                          })}
 | 
			
		||||
                          label={formatMessage({
 | 
			
		||||
                            id: getTrad('settings.form.autoOrientation.label'),
 | 
			
		||||
                            defaultMessage: 'Enable auto orientation',
 | 
			
		||||
                            defaultMessage: 'Auto orientation',
 | 
			
		||||
                          })}
 | 
			
		||||
                          name="autoOrientation"
 | 
			
		||||
                          offLabel={formatMessage({
 | 
			
		||||
 | 
			
		||||
@ -42,7 +42,9 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
 | 
			
		||||
    await waitFor(() =>
 | 
			
		||||
      expect(
 | 
			
		||||
        getByText('Automatically rotate image according to EXIF orientation tag')
 | 
			
		||||
        getByText(
 | 
			
		||||
          'Enabling this option will automatically rotate the image according to EXIF orientation tag.'
 | 
			
		||||
        )
 | 
			
		||||
      ).toBeInTheDocument()
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@ -527,7 +529,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                    <h1
 | 
			
		||||
                      class="c4"
 | 
			
		||||
                    >
 | 
			
		||||
                      Media Library - Settings
 | 
			
		||||
                      Media Library
 | 
			
		||||
                    </h1>
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <button
 | 
			
		||||
@ -564,7 +566,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                <p
 | 
			
		||||
                  class="c12"
 | 
			
		||||
                >
 | 
			
		||||
                  Configure the settings for the media library
 | 
			
		||||
                  Configure the settings for the Media Library
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
@ -592,7 +594,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                          <h2
 | 
			
		||||
                            class="c21"
 | 
			
		||||
                          >
 | 
			
		||||
                            Image
 | 
			
		||||
                            Asset management
 | 
			
		||||
                          </h2>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div
 | 
			
		||||
@ -617,7 +619,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                                      class="c27"
 | 
			
		||||
                                      for="field-1"
 | 
			
		||||
                                    >
 | 
			
		||||
                                      Enable responsive friendly upload
 | 
			
		||||
                                      Responsive friendly upload
 | 
			
		||||
                                    </label>
 | 
			
		||||
                                  </div>
 | 
			
		||||
                                  <label
 | 
			
		||||
@ -626,7 +628,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                                    <div
 | 
			
		||||
                                      class="c29"
 | 
			
		||||
                                    >
 | 
			
		||||
                                      Enable responsive friendly upload
 | 
			
		||||
                                      Responsive friendly upload
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                    <div
 | 
			
		||||
                                      class="c30 c31"
 | 
			
		||||
@ -666,7 +668,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                                    class="c38"
 | 
			
		||||
                                    id="field-1-hint"
 | 
			
		||||
                                  >
 | 
			
		||||
                                    It automatically generates multiple formats (large, medium, small) of the uploaded asset
 | 
			
		||||
                                    Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.
 | 
			
		||||
                                  </p>
 | 
			
		||||
                                </div>
 | 
			
		||||
                              </div>
 | 
			
		||||
@ -691,7 +693,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                                      class="c27"
 | 
			
		||||
                                      for="field-2"
 | 
			
		||||
                                    >
 | 
			
		||||
                                      Enable size optimization (without quality loss)
 | 
			
		||||
                                      Size optimization
 | 
			
		||||
                                    </label>
 | 
			
		||||
                                  </div>
 | 
			
		||||
                                  <label
 | 
			
		||||
@ -700,7 +702,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                                    <div
 | 
			
		||||
                                      class="c29"
 | 
			
		||||
                                    >
 | 
			
		||||
                                      Enable size optimization (without quality loss)
 | 
			
		||||
                                      Size optimization
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                    <div
 | 
			
		||||
                                      class="c30 c31"
 | 
			
		||||
@ -735,6 +737,12 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                                      />
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                  </label>
 | 
			
		||||
                                  <p
 | 
			
		||||
                                    class="c38"
 | 
			
		||||
                                    id="field-2-hint"
 | 
			
		||||
                                  >
 | 
			
		||||
                                    Enabling this option will optimize the file size without compromising on the quality.
 | 
			
		||||
                                  </p>
 | 
			
		||||
                                </div>
 | 
			
		||||
                              </div>
 | 
			
		||||
                            </div>
 | 
			
		||||
@ -758,7 +766,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                                      class="c27"
 | 
			
		||||
                                      for="field-3"
 | 
			
		||||
                                    >
 | 
			
		||||
                                      Enable auto orientation
 | 
			
		||||
                                      Auto orientation
 | 
			
		||||
                                    </label>
 | 
			
		||||
                                  </div>
 | 
			
		||||
                                  <label
 | 
			
		||||
@ -767,7 +775,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                                    <div
 | 
			
		||||
                                      class="c29"
 | 
			
		||||
                                    >
 | 
			
		||||
                                      Enable auto orientation
 | 
			
		||||
                                      Auto orientation
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                    <div
 | 
			
		||||
                                      class="c30 c31"
 | 
			
		||||
@ -807,7 +815,7 @@ describe('Upload | SettingsPage', () => {
 | 
			
		||||
                                    class="c38"
 | 
			
		||||
                                    id="field-3-hint"
 | 
			
		||||
                                  >
 | 
			
		||||
                                    Automatically rotate image according to EXIF orientation tag
 | 
			
		||||
                                    Enabling this option will automatically rotate the image according to EXIF orientation tag.
 | 
			
		||||
                                  </p>
 | 
			
		||||
                                </div>
 | 
			
		||||
                              </div>
 | 
			
		||||
 | 
			
		||||
@ -81,18 +81,20 @@
 | 
			
		||||
  "search.clear.label": "Clear the search",
 | 
			
		||||
  "search.label": "Search for an asset",
 | 
			
		||||
  "search.placeholder": "e.g: the first dog on the moon",
 | 
			
		||||
  "settings.form.autoOrientation.description": "Automatically rotate image according to EXIF orientation tag",
 | 
			
		||||
  "settings.form.autoOrientation.label": "Enable auto orientation",
 | 
			
		||||
  "settings.form.responsiveDimensions.description": "It automatically generates multiple formats (large, medium, small) of the uploaded asset",
 | 
			
		||||
  "settings.form.responsiveDimensions.label": "Enable responsive friendly upload",
 | 
			
		||||
  "settings.form.sizeOptimization.label": "Enable size optimization (without quality loss)",
 | 
			
		||||
  "settings.form.autoOrientation.description": "Enabling this option will automatically rotate the image according to EXIF orientation tag.",
 | 
			
		||||
  "settings.form.autoOrientation.label": "Auto orientation",
 | 
			
		||||
  "settings.form.responsiveDimensions.description": "Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.",
 | 
			
		||||
  "settings.form.responsiveDimensions.label": "Responsive friendly upload",
 | 
			
		||||
  "settings.form.sizeOptimization.description": "Enabling this option will optimize the file size without compromising on the quality.",
 | 
			
		||||
  "settings.form.sizeOptimization.label": "Size optimization",
 | 
			
		||||
  "settings.form.videoPreview.description": "It will generate a six-second preview of the video (GIF)",
 | 
			
		||||
  "settings.form.videoPreview.label": "Preview",
 | 
			
		||||
  "settings.header.label": "Media Library - Settings",
 | 
			
		||||
  "settings.header.label": "Media Library",
 | 
			
		||||
  "settings.section.doc.label": "Doc",
 | 
			
		||||
  "settings.section.image.label": "Image",
 | 
			
		||||
  "settings.section.video.label": "Video",
 | 
			
		||||
  "settings.sub-header.label": "Configure the settings for the media library",
 | 
			
		||||
  "settings.sub-header.label": "Configure the settings for the Media Library",
 | 
			
		||||
  "settings.blockTitle": "Asset Management",
 | 
			
		||||
  "sort.created_at_asc": "Oldest uploads",
 | 
			
		||||
  "sort.created_at_desc": "Most recent uploads",
 | 
			
		||||
  "sort.label": "Sort by",
 | 
			
		||||
 | 
			
		||||
@ -57,7 +57,7 @@ const LocaleTable = ({ locales, onDeleteLocale, onEditLocale }) => {
 | 
			
		||||
            <Td>
 | 
			
		||||
              <Typography textColor="neutral800">
 | 
			
		||||
                {locale.isDefault
 | 
			
		||||
                  ? formatMessage({ id: getTrad('Settings.locales.row.default-locale') })
 | 
			
		||||
                  ? formatMessage({ id: getTrad('Settings.locales.default') })
 | 
			
		||||
                  : null}
 | 
			
		||||
              </Typography>
 | 
			
		||||
            </Td>
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@ const ModalCreate = ({ onClose }) => {
 | 
			
		||||
            <Typography fontWeight="bold" textColor="neutral800" as="h2" id="add-locale-title">
 | 
			
		||||
              {formatMessage({
 | 
			
		||||
                id: getTrad('Settings.list.actions.add'),
 | 
			
		||||
                defaultMessage: 'Add a locale',
 | 
			
		||||
                defaultMessage: 'Add new locale',
 | 
			
		||||
              })}
 | 
			
		||||
            </Typography>
 | 
			
		||||
          </ModalHeader>
 | 
			
		||||
 | 
			
		||||
@ -9,11 +9,11 @@
 | 
			
		||||
  "CheckboxConfirmation.Modal.content": "Disabling localization will engender the deletion of all your content but the one associated to your default locale (if existing).",
 | 
			
		||||
  "Field.localized": "This value is unique for the selected locale",
 | 
			
		||||
  "Field.not-localized": "This value is common to all locales",
 | 
			
		||||
  "Settings.list.actions.add": "Add a locale",
 | 
			
		||||
  "Settings.list.actions.add": "Add new locale",
 | 
			
		||||
  "Settings.list.actions.delete": "Delete a locale",
 | 
			
		||||
  "Settings.list.actions.deleteAdditionalInfos": "This will delete the active locale versions <em>(from Internationalization)</em>",
 | 
			
		||||
  "Settings.list.actions.edit": "Edit a locale",
 | 
			
		||||
  "Settings.list.description": "Configure the settings for the internationalization plugin",
 | 
			
		||||
  "Settings.list.description": "Configure the settings for the Internationalization plugin",
 | 
			
		||||
  "Settings.list.empty.description": "This is not a usual behavior, meaning that you have eventually modified the database manually. Make sure to have at least one locale saved in your database in order to be able to use Strapi correctly.",
 | 
			
		||||
  "Settings.list.empty.title": "There are no locales.",
 | 
			
		||||
  "Settings.locales.list.sort.default": "Sort by the default locale",
 | 
			
		||||
@ -44,9 +44,10 @@
 | 
			
		||||
  "Settings.locales.modal.locales.label": "Locales",
 | 
			
		||||
  "Settings.locales.modal.locales.loaded": "The locales have been successfully loaded.",
 | 
			
		||||
  "Settings.locales.modal.title": "Configurations",
 | 
			
		||||
  "Settings.locales.row.default-locale": "Default",
 | 
			
		||||
  "Settings.locales.row.default-locale": "Default locale",
 | 
			
		||||
  "Settings.locales.row.displayName": "Display name",
 | 
			
		||||
  "Settings.locales.row.id": "ID",
 | 
			
		||||
  "Settings.locales.default": "Default",
 | 
			
		||||
  "Settings.permissions.loading": "Loading permissions",
 | 
			
		||||
  "Settings.permissions.read.denied.description": "In order to be able to read this, make sure to get in touch with the administrator of your system.",
 | 
			
		||||
  "Settings.permissions.read.denied.title": "You don't have the permissions to access this content.",
 | 
			
		||||
 | 
			
		||||
@ -109,7 +109,7 @@ const EditPage = () => {
 | 
			
		||||
                <Link startIcon={<ArrowLeft />} to="/settings/users-permissions/roles">
 | 
			
		||||
                  {formatMessage({
 | 
			
		||||
                    id: 'app.components.go-back',
 | 
			
		||||
                    defaultMessage: 'Go back',
 | 
			
		||||
                    defaultMessage: 'Back',
 | 
			
		||||
                  })}
 | 
			
		||||
                </Link>
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
@ -1043,7 +1043,7 @@ describe('Admin | containers | RoleEditPage', () => {
 | 
			
		||||
                  <span
 | 
			
		||||
                    class="c6"
 | 
			
		||||
                  >
 | 
			
		||||
                    Go back
 | 
			
		||||
                    Back
 | 
			
		||||
                  </span>
 | 
			
		||||
                </a>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user