Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'doc/development/new_fe_guide')
-rw-r--r--doc/development/new_fe_guide/development/accessibility.md55
-rw-r--r--doc/development/new_fe_guide/development/components.md30
-rw-r--r--doc/development/new_fe_guide/development/index.md26
-rw-r--r--doc/development/new_fe_guide/development/performance.md25
-rw-r--r--doc/development/new_fe_guide/index.md25
-rw-r--r--doc/development/new_fe_guide/modules/dirty_submit.md31
-rw-r--r--doc/development/new_fe_guide/modules/index.md18
-rw-r--r--doc/development/new_fe_guide/modules/widget_extensions.md358
-rw-r--r--doc/development/new_fe_guide/tips.md38
9 files changed, 63 insertions, 543 deletions
diff --git a/doc/development/new_fe_guide/development/accessibility.md b/doc/development/new_fe_guide/development/accessibility.md
index 65485104efe..9575acd20c7 100644
--- a/doc/development/new_fe_guide/development/accessibility.md
+++ b/doc/development/new_fe_guide/development/accessibility.md
@@ -1,52 +1,11 @@
---
-stage: none
-group: unassigned
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../../fe_guide/accessibility.md'
+remove_date: '2022-11-15'
---
-# Accessibility
+This document was moved to [another location](../../fe_guide/accessibility.md).
-Using semantic HTML plays a key role when it comes to accessibility.
-
-## Accessible Rich Internet Applications - ARIA
-
-WAI-ARIA (the Accessible Rich Internet Applications specification) defines a way to make Web content and Web applications more accessible to people with disabilities.
-
-The W3C recommends [using semantic elements](https://www.w3.org/TR/using-aria/#notes2) as the primary method to achieve accessibility rather than adding aria attributes. Adding aria attributes should be seen as a secondary method for creating accessible elements.
-
-### Role
-
-The `role` attribute describes the role the element plays in the context of the document.
-
-Review the list of [WAI-ARIA roles](https://www.w3.org/TR/wai-aria-1.1/#landmark_roles).
-
-## Icons
-
-When using icons or images that aren't absolutely needed to understand the context, we should use `aria-hidden="true"`.
-
-On the other hand, if an icon is crucial to understand the context we should do one of the following:
-
-1. Use `aria-label` in the element with a meaningful description
-1. Use `aria-labelledby` to point to an element that contains the explanation for that icon
-
-## Form inputs
-
-In forms we should use the `for` attribute in the label statement:
-
-```html
-<div>
- <label for="name">Fill in your name:</label>
- <input type="text" id="name" name="name">
-</div>
-```
-
-## Testing
-
-1. On MacOS you can use [VoiceOver](https://www.apple.com/accessibility/vision/) by pressing `cmd+F5`.
-1. On Windows you can use [Narrator](https://www.microsoft.com/en-us/accessibility/windows) by pressing Windows logo key + Control + Enter.
-
-## Online resources
-
-- [Chrome Accessibility Developer Tools](https://github.com/GoogleChrome/accessibility-developer-tools) for testing accessibility
-- [Audit Rules Page](https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules) for best practices
-- [Lighthouse Accessibility Score](https://web.dev/performance-scoring/) for accessibility audits
+<!-- This redirect file can be deleted after <2022-11-15>. -->
+<!-- Redirects that point to other docs in the same project expire in three months. -->
+<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
diff --git a/doc/development/new_fe_guide/development/components.md b/doc/development/new_fe_guide/development/components.md
index ec714c9c26f..9ad742272d1 100644
--- a/doc/development/new_fe_guide/development/components.md
+++ b/doc/development/new_fe_guide/development/components.md
@@ -1,27 +1,11 @@
---
-stage: none
-group: unassigned
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../../fe_guide/index.md'
+remove_date: '2022-11-15'
---
-# Components
+This document was moved to [another location](../../fe_guide/index.md).
-## Graphs
-
-We have a lot of graphing libraries in our codebase to render graphs. In an effort to improve maintainability, new graphs should use [D3.js](https://d3js.org/). If a new graph is fairly simple, consider implementing it in SVGs or HTML5 canvas.
-
-We chose D3 as our library going forward because of the following features:
-
-- [Tree shaking webpack capabilities](https://github.com/d3/d3/blob/master/CHANGES.md#changes-in-d3-40).
-- [Compatible with vue.js as well as vanilla JavaScript](https://github.com/d3/d3/blob/master/CHANGES.md#changes-in-d3-40).
-
-D3 is very popular across many projects outside of GitLab:
-
-- [The New York Times](https://archive.nytimes.com/www.nytimes.com/interactive/2012/02/13/us/politics/2013-budget-proposal-graphic.html)
-- [plot.ly](https://plotly.com/)
-- [Ayoa](https://www.ayoa.com/previously-droptask/)
-
-Within GitLab, D3 has been used for the following notable features
-
-- [Prometheus graphs](../../../user/project/integrations/prometheus.md)
-- Contribution calendars
+<!-- This redirect file can be deleted after <2022-11-15>. -->
+<!-- Redirects that point to other docs in the same project expire in three months. -->
+<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
diff --git a/doc/development/new_fe_guide/development/index.md b/doc/development/new_fe_guide/development/index.md
index 5922c3aeeed..9ad742272d1 100644
--- a/doc/development/new_fe_guide/development/index.md
+++ b/doc/development/new_fe_guide/development/index.md
@@ -1,23 +1,11 @@
---
-stage: none
-group: unassigned
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../../fe_guide/index.md'
+remove_date: '2022-11-15'
---
-# Development
+This document was moved to [another location](../../fe_guide/index.md).
-## [Components](components.md)
-
-Documentation on existing components and how to best create a new component.
-
-## [Accessibility](accessibility.md)
-
-Learn how to implement an accessible frontend.
-
-## [Performance](performance.md)
-
-Learn how to keep our frontend performant.
-
-## [Testing](../../testing_guide/frontend_testing.md)
-
-Learn how to keep our frontend tested.
+<!-- This redirect file can be deleted after <2022-11-15>. -->
+<!-- Redirects that point to other docs in the same project expire in three months. -->
+<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
diff --git a/doc/development/new_fe_guide/development/performance.md b/doc/development/new_fe_guide/development/performance.md
index ee853942cb9..c72f3ded896 100644
--- a/doc/development/new_fe_guide/development/performance.md
+++ b/doc/development/new_fe_guide/development/performance.md
@@ -1,22 +1,11 @@
---
-stage: none
-group: unassigned
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../../fe_guide/performance.md'
+remove_date: '2022-11-15'
---
-# Performance
+This document was moved to [another location](../../fe_guide/performance.md).
-## Monitoring
-
-We have a performance dashboard available in one of our [Grafana instances](https://dashboards.gitlab.net/d/000000043/sitespeed-page-summary?orgId=1). This dashboard automatically aggregates metric data from [sitespeed.io](https://www.sitespeed.io/) every 4 hours. These changes are displayed after a set number of pages are aggregated.
-
-These pages can be found inside text files in the [`sitespeed-measurement-setup` repository](https://gitlab.com/gitlab-org/frontend/sitespeed-measurement-setup) called [`gitlab`](https://gitlab.com/gitlab-org/frontend/sitespeed-measurement-setup/-/tree/master/gitlab)
-Any frontend engineer can contribute to this dashboard. They can contribute by adding or removing URLs of pages to the text files. The changes are pushed live on the next scheduled run after the changes are merged into `main`.
-
-There are 3 recommended high impact metrics (core web vitals) to review on each page:
-
-- [Largest Contentful Paint](https://web.dev/lcp/)
-- [First Input Delay](https://web.dev/fid/)
-- [Cumulative Layout Shift](https://web.dev/cls/)
-
-For these metrics, lower numbers are better as it means that the website is more performant.
+<!-- This redirect file can be deleted after <2022-11-15>. -->
+<!-- Redirects that point to other docs in the same project expire in three months. -->
+<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
diff --git a/doc/development/new_fe_guide/index.md b/doc/development/new_fe_guide/index.md
index 4d4098844b2..83c1db696b4 100644
--- a/doc/development/new_fe_guide/index.md
+++ b/doc/development/new_fe_guide/index.md
@@ -1,22 +1,11 @@
---
-stage: none
-group: unassigned
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../fe_guide/index.md'
+remove_date: '2022-11-15'
---
-# Frontend Development Guidelines
+This document was moved to [another location](../fe_guide/index.md).
-This guide contains all the information to successfully contribute to the GitLab frontend.
-This is a living document, and we welcome contributions, feedback, and suggestions.
-
-## [Development](development/index.md)
-
-Guidance on topics related to development.
-
-## [Modules](modules/index.md)
-
-Learn about all the internal JavaScript modules that make up our frontend.
-
-## [Tips](tips.md)
-
-Tips from our frontend team to develop more efficiently and effectively.
+<!-- This redirect file can be deleted after <2022-11-15>. -->
+<!-- Redirects that point to other docs in the same project expire in three months. -->
+<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
diff --git a/doc/development/new_fe_guide/modules/dirty_submit.md b/doc/development/new_fe_guide/modules/dirty_submit.md
index 6e1062aa72e..9ad742272d1 100644
--- a/doc/development/new_fe_guide/modules/dirty_submit.md
+++ b/doc/development/new_fe_guide/modules/dirty_submit.md
@@ -1,28 +1,11 @@
---
-stage: none
-group: unassigned
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../../fe_guide/index.md'
+remove_date: '2022-11-15'
---
-# Dirty Submit
+This document was moved to [another location](../../fe_guide/index.md).
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/21115) in GitLab 11.3.
-
-## Summary
-
-Prevent submitting forms with no changes.
-
-Currently handles `input`, `textarea` and `select` elements.
-
-Also, see [the code](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/assets/javascripts/dirty_submit/)
-within the GitLab project.
-
-## Usage
-
-```javascript
-import dirtySubmitFactory from './dirty_submit/dirty_submit_form';
-
-new DirtySubmitForm(document.querySelector('form'));
-// or
-new DirtySubmitForm(document.querySelectorAll('form'));
-```
+<!-- This redirect file can be deleted after <2022-11-15>. -->
+<!-- Redirects that point to other docs in the same project expire in three months. -->
+<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
diff --git a/doc/development/new_fe_guide/modules/index.md b/doc/development/new_fe_guide/modules/index.md
index a9bdcda4a2d..9ad742272d1 100644
--- a/doc/development/new_fe_guide/modules/index.md
+++ b/doc/development/new_fe_guide/modules/index.md
@@ -1,15 +1,11 @@
---
-stage: none
-group: unassigned
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../../fe_guide/index.md'
+remove_date: '2022-11-15'
---
-# Modules
+This document was moved to [another location](../../fe_guide/index.md).
-- [DirtySubmit](dirty_submit.md)
-
- Disable form submits until there are unsaved changes.
-
-- [Merge Request widget extensions](widget_extensions.md)
-
- Easily add extensions into the merge request widget
+<!-- This redirect file can be deleted after <2022-11-15>. -->
+<!-- Redirects that point to other docs in the same project expire in three months. -->
+<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
diff --git a/doc/development/new_fe_guide/modules/widget_extensions.md b/doc/development/new_fe_guide/modules/widget_extensions.md
index 4bae0ac70c4..3741ee8c38a 100644
--- a/doc/development/new_fe_guide/modules/widget_extensions.md
+++ b/doc/development/new_fe_guide/modules/widget_extensions.md
@@ -1,355 +1,11 @@
---
-stage: Create
-group: Code Review
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../../fe_guide/merge_request_widget_extensions.md'
+remove_date: '2022-11-15'
---
-# Merge request widget extensions **(FREE)**
+This document was moved to [another location](../../fe_guide/merge_request_widget_extensions.md).
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/44616) in GitLab 13.6.
-
-## Summary
-
-Extensions in the merge request widget enable you to add new features
-into the merge request widget that match the design framework.
-With extensions we get a lot of benefits out of the box without much effort required, like:
-
-- A consistent look and feel.
-- Tracking when the extension is opened.
-- Virtual scrolling for performance.
-
-## Usage
-
-To use extensions you must first create a new extension object to fetch the
-data to render in the extension. For a working example, refer to the example file in
-`app/assets/javascripts/vue_merge_request_widget/extensions/issues.js`.
-
-The basic object structure:
-
-```javascript
-export default {
- name: '', // Required: This helps identify the widget
- props: [], // Required: Props passed from the widget state
- i18n: { // Required: Object to hold i18n text
- label: '', // Required: Used for tooltips and aria-labels
- loading: '', // Required: Loading text for when data is loading
- },
- expandEvent: '', // Optional: RedisHLL event name to track expanding content
- enablePolling: false, // Optional: Tells extension to poll for data
- modalComponent: null, // Optional: The component to use for the modal
- computed: {
- summary(data) {}, // Required: Level 1 summary text
- statusIcon(data) {}, // Required: Level 1 status icon
- tertiaryButtons() {}, // Optional: Level 1 action buttons
- shouldCollapse() {}, // Optional: Add logic to determine if the widget can expand or not
- },
- methods: {
- fetchCollapsedData(props) {}, // Required: Fetches data required for collapsed state
- fetchFullData(props) {}, // Required: Fetches data for the full expanded content
- fetchMultiData() {}, // Optional: Works in conjunction with `enablePolling` and allows polling multiple endpoints
- },
-};
-```
-
-By following the same data structure, each extension can follow the same registering structure,
-but each extension can manage its data sources.
-
-After creating this structure, you must register it. You can register the extension at any
-point _after_ the widget has been created. To register a extension:
-
-```javascript
-// Import the register method
-import { registerExtension } from '~/vue_merge_request_widget/components/extensions';
-
-// Import the new extension
-import issueExtension from '~/vue_merge_request_widget/extensions/issues';
-
-// Register the imported extension
-registerExtension(issueExtension);
-```
-
-## Data fetching
-
-Each extension must fetch data. Fetching is handled when registering the extension,
-not by the core component itself. This approach allows for various different
-data fetching methods to be used, such as GraphQL or REST API calls.
-
-### API calls
-
-For performance reasons, it is best if the collapsed state fetches only the data required to
-render the collapsed state. This fetching happens within the `fetchCollapsedData` method.
-This method is called with the props as an argument, so you can easily access
-any paths set in the state.
-
-To allow the extension to set the data, this method **must** return the data. No
-special formatting is required. When the extension receives this data,
-it is set to `collapsedData`. You can access `collapsedData` in any computed property or
-method.
-
-When the user clicks **Expand**, the `fetchFullData` method is called. This method
-also gets called with the props as an argument. This method **must** also return
-the full data. However, this data needs to be correctly formatted to match the format
-mentioned in the data structure section.
-
-#### Technical debt
-
-For some of the current extensions, there is no split in data fetching. All the data
-is fetched through the `fetchCollapsedData` method. While less performant,
-it allows for faster iteration.
-
-To handle this the `fetchFullData` returns the data set through
-the `fetchCollapsedData` method call. In these cases, the `fetchFullData` must
-return a promise:
-
-```javascript
-fetchCollapsedData() {
- return ['Some data'];
-},
-fetchFullData() {
- return Promise.resolve(this.collapsedData)
-},
-```
-
-### Data structure
-
-The data returned from `fetchFullData` must match the format below. This format
-allows the core component to render the data in a way that matches
-the design framework. Any text properties can use the styling placeholders
-mentioned below:
-
-```javascript
-{
- id: data.id, // Required: ID used as a key for each row
- header: 'Header' || ['Header', 'sub-header'], // Required: String or array can be used for the header text
- text: '', // Required: Main text for the row
- subtext: '', // Optional: Smaller sub-text to be displayed below the main text
- icon: { // Optional: Icon object
- name: EXTENSION_ICONS.success, // Required: The icon name for the row
- },
- badge: { // Optional: Badge displayed after text
- text: '', // Required: Text to be displayed inside badge
- variant: '', // Optional: GitLab UI badge variant, defaults to info
- },
- link: { // Optional: Link to a URL displayed after text
- text: '', // Required: Text of the link
- href: '', // Optional: URL for the link
- },
- modal: { // Optional: Link to open a modal displayed after text
- text: '', // Required: Text of the link
- onClick: () => {} // Optional: Function to run when link is clicked, i.e. to set this.modalData
- }
- actions: [], // Optional: Action button for row
- children: [], // Optional: Child content to render, structure matches the same structure
-}
-```
-
-### Polling
-
-To enable polling for an extension, an options flag must be present in the extension:
-
-```javascript
-export default {
- //...
- enablePolling: true
-};
-```
-
-This flag tells the base component we should poll the `fetchCollapsedData()`
-defined in the extension. Polling stops if the response has data, or if an error is present.
-
-When writing the logic for `fetchCollapsedData()`, a complete Axios response must be returned
-from the method. The polling utility needs data like polling headers to work correctly:
-
-```javascript
-export default {
- //...
- enablePolling: true
- methods: {
- fetchCollapsedData() {
- return axios.get(this.reportPath)
- },
- },
-};
-```
-
-Most of the time the data returned from the extension's endpoint is not in the format
-the UI needs. We must format the data before setting the collapsed data in the base component.
-
-If the computed property `summary` can rely on `collapsedData`, you can format the data
-when `fetchFullData` is invoked:
-
-```javascript
-export default {
- //...
- enablePolling: true
- methods: {
- fetchCollapsedData() {
- return axios.get(this.reportPath)
- },
- fetchFullData() {
- return Promise.resolve(this.prepareReports());
- },
- // custom method
- prepareReports() {
- // unpack values from collapsedData
- const { new_errors, existing_errors, resolved_errors } = this.collapsedData;
-
- // perform data formatting
-
- return [...newErrors, ...existingErrors, ...resolvedErrors]
- }
- },
-};
-```
-
-If the extension relies on `collapsedData` being formatted before invoking `fetchFullData()`,
-then `fetchCollapsedData()` must return the Axios response as well as the formatted data:
-
-```javascript
-export default {
- //...
- enablePolling: true
- methods: {
- fetchCollapsedData() {
- return axios.get(this.reportPath).then(res => {
- const formattedData = this.prepareReports(res.data)
-
- return {
- ...res,
- data: formattedData,
- }
- })
- },
- // Custom method
- prepareReports() {
- // Unpack values from collapsedData
- const { new_errors, existing_errors, resolved_errors } = this.collapsedData;
-
- // Perform data formatting
-
- return [...newErrors, ...existingErrors, ...resolvedErrors]
- }
- },
-};
-```
-
-If the extension needs to poll multiple endpoints at the same time, then `fetchMultiData`
-can be used to return an array of functions. A new `poll` object is created for each
-endpoint and they are polled separately. After all endpoints are resolved, polling is
-stopped and `setCollapsedData` is called with an array of `response.data`.
-
-```javascript
-export default {
- //...
- enablePolling: true
- methods: {
- fetchMultiData() {
- return [
- () => axios.get(this.reportPath1),
- () => axios.get(this.reportPath2),
- () => axios.get(this.reportPath3)
- },
- },
-};
-```
-
-**Important** The function needs to return a `Promise` that resolves the `response` object.
-The implementation relies on the `POLL-INTERVAL` header to keep polling, therefore it is
-important not to alter the status code and headers.
-
-### Errors
-
-If `fetchCollapsedData()` or `fetchFullData()` methods throw an error:
-
-- The loading state of the extension is updated to `LOADING_STATES.collapsedError`
- and `LOADING_STATES.expandedError` respectively.
-- The extensions header displays an error icon and updates the text to be either:
- - The text defined in `$options.i18n.error`.
- - "Failed to load" if `$options.i18n.error` is not defined.
-- The error is sent to Sentry to log that it occurred.
-
-To customise the error text, add it to the `i18n` object in your extension:
-
-```javascript
-export default {
- //...
- i18n: {
- //...
- error: __('Your error text'),
- },
-};
-```
-
-## Icons
-
-Level 1 and all subsequent levels can have their own status icons. To keep with
-the design framework, import the `EXTENSION_ICONS` constant
-from the `constants.js` file:
-
-```javascript
-import { EXTENSION_ICONS } from '~/vue_merge_request_widget/constants.js';
-```
-
-This constant has the below icons available for use. Per the design framework,
-only some of these icons should be used on level 1:
-
-- `failed`
-- `warning`
-- `success`
-- `neutral`
-- `error`
-- `notice`
-- `severityCritical`
-- `severityHigh`
-- `severityMedium`
-- `severityLow`
-- `severityInfo`
-- `severityUnknown`
-
-## Text styling
-
-Any area that has text can be styled with the placeholders below. This
-technique follows the same technique as `sprintf`. However, instead of specifying
-these through `sprintf`, the extension does this automatically.
-
-Every placeholder contains starting and ending tags. For example, `success` uses
-`Hello %{success_start}world%{success_end}`. The extension then
-adds the start and end tags with the correct styling classes.
-
-| Placeholder | Style |
-|---|---|
-| success | `gl-font-weight-bold gl-text-green-500` |
-| danger | `gl-font-weight-bold gl-text-red-500` |
-| critical | `gl-font-weight-bold gl-text-red-800` |
-| same | `gl-font-weight-bold gl-text-gray-700` |
-| strong | `gl-font-weight-bold` |
-| small | `gl-font-sm` |
-
-## Action buttons
-
-You can add action buttons to all level 1 and 2 in each extension. These buttons
-are meant as a way to provide links or actions for each row:
-
-- Action buttons for level 1 can be set through the `tertiaryButtons` computed property.
- This property should return an array of objects for each action button.
-- Action buttons for level 2 can be set by adding the `actions` key to the level 2 rows object.
- The value for this key must also be an array of objects for each action button.
-
-Links must follow this structure:
-
-```javascript
-{
- text: 'Click me',
- href: this.someLinkHref,
- target: '_blank', // Optional
-}
-```
-
-For internal action buttons, follow this structure:
-
-```javascript
-{
- text: 'Click me',
- onClick() {}
-}
-```
+<!-- This redirect file can be deleted after <2022-11-15>. -->
+<!-- Redirects that point to other docs in the same project expire in three months. -->
+<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
diff --git a/doc/development/new_fe_guide/tips.md b/doc/development/new_fe_guide/tips.md
index 5d4c0fc019f..83c1db696b4 100644
--- a/doc/development/new_fe_guide/tips.md
+++ b/doc/development/new_fe_guide/tips.md
@@ -1,35 +1,11 @@
---
-stage: none
-group: Development
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../fe_guide/index.md'
+remove_date: '2022-11-15'
---
-# Tips
+This document was moved to [another location](../fe_guide/index.md).
-## Clearing production compiled assets
-
-To clear production compiled assets created with `yarn webpack-prod` you can run:
-
-```shell
-yarn clean
-```
-
-## Creating feature flags in development
-
-The process for creating a feature flag is the same as [enabling a feature flag in development](../feature_flags/index.md#enabling-a-feature-flag-locally-in-development).
-
-Your feature flag can now be:
-
-- [Made available to the frontend](../feature_flags/index.md#frontend) via the `gon`
-- Queried in [tests](../feature_flags/index.md#feature-flags-in-tests)
-- Queried in HAML templates and Ruby files via the `Feature.enabled?(:my_shiny_new_feature_flag)` method
-
-### More on feature flags
-
-- [Deleting a feature flag](../../api/features.md#delete-a-feature)
-- [Manage feature flags](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/)
-- [Feature flags API](../../api/features.md)
-
-## Running tests locally
-
-This can be done as outlined by the [frontend testing guide](../testing_guide/frontend_testing.md#running-frontend-tests).
+<!-- This redirect file can be deleted after <2022-11-15>. -->
+<!-- Redirects that point to other docs in the same project expire in three months. -->
+<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->