2024-03-06 13:09:14 +00:00
|
|
|
import * as DOMPurify from "dompurify";
|
2023-09-22 10:01:54 +00:00
|
|
|
import {
|
|
|
|
CYCLE_ISSUES_WITH_PARAMS,
|
|
|
|
MODULE_ISSUES_WITH_PARAMS,
|
|
|
|
PROJECT_ISSUES_LIST_WITH_PARAMS,
|
|
|
|
VIEW_ISSUES,
|
2024-03-19 14:38:35 +00:00
|
|
|
} from "@/constants/fetch-keys";
|
2023-09-22 10:01:54 +00:00
|
|
|
|
2023-11-03 13:41:28 +00:00
|
|
|
export const addSpaceIfCamelCase = (str: string) => {
|
|
|
|
if (str === undefined || str === null) return "";
|
|
|
|
|
|
|
|
if (typeof str !== "string") str = `${str}`;
|
|
|
|
|
|
|
|
return str.replace(/([a-z])([A-Z])/g, "$1 $2");
|
|
|
|
};
|
2023-01-26 18:12:20 +00:00
|
|
|
|
|
|
|
export const replaceUnderscoreIfSnakeCase = (str: string) => str.replace(/_/g, " ");
|
|
|
|
|
|
|
|
export const capitalizeFirstLetter = (str: string) => str.charAt(0).toUpperCase() + str.slice(1);
|
|
|
|
|
2023-03-14 06:46:38 +00:00
|
|
|
export const truncateText = (str: string, length: number) => {
|
|
|
|
if (!str || str === "") return "";
|
|
|
|
|
|
|
|
return str.length > length ? `${str.substring(0, length)}...` : str;
|
|
|
|
};
|
2023-02-23 17:04:36 +00:00
|
|
|
|
2023-01-26 18:12:20 +00:00
|
|
|
export const createSimilarString = (str: string) => {
|
|
|
|
const shuffled = str
|
|
|
|
.split("")
|
|
|
|
.sort(() => Math.random() - 0.5)
|
|
|
|
.join("");
|
|
|
|
|
|
|
|
return shuffled;
|
|
|
|
};
|
|
|
|
|
|
|
|
const fallbackCopyTextToClipboard = (text: string) => {
|
|
|
|
var textArea = document.createElement("textarea");
|
|
|
|
textArea.value = text;
|
|
|
|
|
|
|
|
// Avoid scrolling to bottom
|
|
|
|
textArea.style.top = "0";
|
|
|
|
textArea.style.left = "0";
|
|
|
|
textArea.style.position = "fixed";
|
|
|
|
|
|
|
|
document.body.appendChild(textArea);
|
|
|
|
textArea.focus();
|
|
|
|
textArea.select();
|
|
|
|
|
|
|
|
try {
|
|
|
|
// FIXME: Even though we are using this as a fallback, execCommand is deprecated 👎. We should find a better way to do this.
|
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
|
|
|
|
var successful = document.execCommand("copy");
|
2023-04-17 19:45:26 +00:00
|
|
|
} catch (err) {}
|
2023-01-26 18:12:20 +00:00
|
|
|
|
|
|
|
document.body.removeChild(textArea);
|
|
|
|
};
|
|
|
|
|
|
|
|
export const copyTextToClipboard = async (text: string) => {
|
|
|
|
if (!navigator.clipboard) {
|
|
|
|
fallbackCopyTextToClipboard(text);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
await navigator.clipboard.writeText(text);
|
|
|
|
};
|
|
|
|
|
2023-10-20 11:37:46 +00:00
|
|
|
/**
|
|
|
|
* @description: This function copies the url to clipboard after prepending the origin URL to it
|
|
|
|
* @param {string} path
|
|
|
|
* @example:
|
|
|
|
* const text = copyUrlToClipboard("path");
|
|
|
|
* copied URL: origin_url/path
|
|
|
|
*/
|
|
|
|
export const copyUrlToClipboard = async (path: string) => {
|
|
|
|
const originUrl = typeof window !== "undefined" && window.location.origin ? window.location.origin : "";
|
|
|
|
|
|
|
|
await copyTextToClipboard(`${originUrl}/${path}`);
|
|
|
|
};
|
|
|
|
|
2023-05-18 13:37:24 +00:00
|
|
|
export const generateRandomColor = (string: string): string => {
|
2023-07-10 07:17:00 +00:00
|
|
|
if (!string) return "rgb(var(--color-primary-100))";
|
2023-05-18 13:37:24 +00:00
|
|
|
|
|
|
|
string = `${string}`;
|
|
|
|
|
|
|
|
const uniqueId = string.length.toString() + string; // Unique identifier based on string length
|
|
|
|
const combinedString = uniqueId + string;
|
|
|
|
|
|
|
|
const hash = Array.from(combinedString).reduce((acc, char) => {
|
|
|
|
const charCode = char.charCodeAt(0);
|
|
|
|
return (acc << 5) - acc + charCode;
|
|
|
|
}, 0);
|
|
|
|
|
|
|
|
const hue = hash % 360;
|
|
|
|
const saturation = 70; // Higher saturation for pastel colors
|
|
|
|
const lightness = 60; // Mid-range lightness for pastel colors
|
|
|
|
|
|
|
|
const randomColor = `hsl(${hue}, ${saturation}%, ${lightness}%)`;
|
|
|
|
|
|
|
|
return randomColor;
|
|
|
|
};
|
2023-05-30 13:44:35 +00:00
|
|
|
|
|
|
|
export const getFirstCharacters = (str: string) => {
|
|
|
|
const words = str.trim().split(" ");
|
|
|
|
if (words.length === 1) {
|
|
|
|
return words[0].charAt(0);
|
|
|
|
} else {
|
|
|
|
return words[0].charAt(0) + words[1].charAt(0);
|
|
|
|
}
|
|
|
|
};
|
2023-07-18 06:37:55 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @description: This function will remove all the HTML tags from the string
|
|
|
|
* @param {string} html
|
|
|
|
* @return {string}
|
|
|
|
* @example:
|
|
|
|
* const html = "<p>Some text</p>";
|
|
|
|
* const text = stripHTML(html);
|
|
|
|
* console.log(text); // Some text
|
|
|
|
*/
|
|
|
|
|
|
|
|
export const stripHTML = (html: string) => {
|
2023-10-30 08:29:00 +00:00
|
|
|
const strippedText = html.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, ""); // Remove script tags
|
|
|
|
return strippedText.replace(/<[^>]*>/g, ""); // Remove all other HTML tags
|
2023-07-18 06:37:55 +00:00
|
|
|
};
|
|
|
|
|
2023-10-30 08:29:00 +00:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @example:
|
|
|
|
* const html = "<p>Some text</p>";
|
|
|
|
* const text = stripAndTruncateHTML(html);
|
|
|
|
* console.log(text); // Some text
|
|
|
|
*/
|
|
|
|
|
|
|
|
export const stripAndTruncateHTML = (html: string, length: number = 55) => truncateText(stripHTML(html), length);
|
|
|
|
|
2023-07-18 06:37:55 +00:00
|
|
|
/**
|
|
|
|
* @description: This function return number count in string if number is more than 100 then it will return 99+
|
|
|
|
* @param {number} number
|
|
|
|
* @return {string}
|
|
|
|
* @example:
|
|
|
|
* const number = 100;
|
|
|
|
* const text = getNumberCount(number);
|
|
|
|
* console.log(text); // 99+
|
|
|
|
*/
|
|
|
|
|
|
|
|
export const getNumberCount = (number: number): string => {
|
|
|
|
if (number > 99) {
|
|
|
|
return "99+";
|
|
|
|
}
|
|
|
|
return number.toString();
|
|
|
|
};
|
2023-07-26 06:32:14 +00:00
|
|
|
|
|
|
|
export const objToQueryParams = (obj: any) => {
|
|
|
|
const params = new URLSearchParams();
|
|
|
|
|
|
|
|
for (const [key, value] of Object.entries(obj)) {
|
|
|
|
if (value !== undefined && value !== null) params.append(key, value as string);
|
|
|
|
}
|
|
|
|
|
|
|
|
return params.toString();
|
|
|
|
};
|
2023-09-22 10:01:54 +00:00
|
|
|
|
|
|
|
export const getFetchKeysForIssueMutation = (options: {
|
|
|
|
cycleId?: string | string[];
|
|
|
|
moduleId?: string | string[];
|
|
|
|
viewId?: string | string[];
|
|
|
|
projectId: string;
|
|
|
|
viewGanttParams: any;
|
|
|
|
ganttParams: any;
|
|
|
|
}) => {
|
fix: Implementing mobx, refactoring service layer and rewriting components (#2441)
* chore: kanban refactoring
* chore: Implemented new kanaban board UX and implemented draggable using react beautiful dnd
* chore: updated yarn lock
* chore: updated the store for issues and issue filters
* chore: resolved build error
* chore: created filters and updated the issue filters, display_filter and display_properties in mobx and components
* chore: implemented filters for issues
* chore: UI theming updates
* chore: handled single and multi select in filter cards
* chore: implemented filters and views in kanaban
* chore: updating filters, display_filter and display properties
* chore: filter, layout, display filters, extra filters and display properties render validation
* chore: clean up and resolved import warnings
* chore: type check
* chore: renamed gantt key to gantt_chart
* chore: filter render UI and Functionality implementation
* chore: filter empty state handling in issue filter selection
* Implementing list view
* chore: kanban drag drop logic
* filtering
* chore: store setup
* chore: handled build issues
* chore: store setup
* user filter
* chore: store setup
* chore: store fixes and static data setup
* chore: store setup for build fixes
* fix: merge conflicts (#2231)
* chore: dynamic position dropdown (#2138)
* chore: dynamic position state dropdown for issue view
* style: state select dropdown styling
* fix: state icon attribute names
* chore: state select dynamic dropdown
* chore: member select dynamic dropdown
* chore: label select dynamic dropdown
* chore: priority select dynamic dropdown
* chore: label select dropdown improvement
* refactor: state dropdown location
* chore: dropdown improvement and code refactor
* chore: dynamic dropdown hook type added
---------
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
* fix: fields not getting selected in the create issue form (#2212)
* fix: hydration error and draft issue workflow
* fix: build error
* fix: properties getting de-selected after create, module & cycle not getting auto-select on the form
* fix: display layout, props being updated directly
* chore: sub issues count in individual issue (#2221)
* fix: service imports
* chore: rename csv service file
---------
Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com>
Co-authored-by: Dakshesh Jain <65905942+dakshesh14@users.noreply.github.com>
Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com>
* chore: store fixes
* chore: update issue detail store to handle peek overview (#2237)
* chore: dynamic position dropdown (#2138)
* chore: dynamic position state dropdown for issue view
* style: state select dropdown styling
* fix: state icon attribute names
* chore: state select dynamic dropdown
* chore: member select dynamic dropdown
* chore: label select dynamic dropdown
* chore: priority select dynamic dropdown
* chore: label select dropdown improvement
* refactor: state dropdown location
* chore: dropdown improvement and code refactor
* chore: dynamic dropdown hook type added
---------
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
* fix: fields not getting selected in the create issue form (#2212)
* fix: hydration error and draft issue workflow
* fix: build error
* fix: properties getting de-selected after create, module & cycle not getting auto-select on the form
* fix: display layout, props being updated directly
* chore: sub issues count in individual issue (#2221)
* Implemented nested issues in the sub issues section in issue detail page (#2233)
* feat: subissues infinte level
* feat: updated UI for sub issues
* feat: subissues new ui and nested sub issues in issue detail
* chore: removed repeated code
* refactor: product updates modal layout (#2225)
* fix: handle no issues in custom analytics (#2226)
* fix: activity label color (#2227)
* fix: profile issues layout switch (#2228)
* chore: update service imports
* chore: update issue detail store to handle peek overview
---------
Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com>
Co-authored-by: Dakshesh Jain <65905942+dakshesh14@users.noreply.github.com>
Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com>
Co-authored-by: guru_sainath <gurusainath007@gmail.com>
* chore: minor fixes
* workspace project fixes
* feat: project issues topbar (#2256)
* chore: project issues topbar
* style: theming and minor UI fixes
* refactor: file structure
* chore: layout wise authorization added
* style: filter dropdowns
* chore: add fetch keys
* chore: minor fixes
* chore: filters dropdown (#2260)
* chore: project issues topbar
* style: theming and minor UI fixes
* refactor: file structure
* chore: layout wise authorization added
* style: filter dropdowns
* chore: add fetch keys
* feat: search option for filters
* fix: sticky headers
* chore: sub_group_by section added
* fix: leave project fixes
* refactor: project card component refactor
* Implemented swimlanes and kanban view (#2262)
* chore: issue store for kanban and calendar
* chore: updated ui for kanba and swimlanes
* chore: yarn.lock updated
* fix: computed filters logic
* chore: added sub_group_by in params and handled sub-group-by render error in display filter's
* fix: ui package setup and project update form refactor
* fix: ui package setup
* fix: minor ui fixes
* dev: calendar view layout revamp (#2293)
* dev: calendar view init
* chore: new render logic
* chore: implement calendar view
* chore: calendar view
* refactor: calendar payload
* chore: remove active month logic from backend
* chore: setup new store for calendar
* refactor: issues fetching structure
* chore: months dropdown
* chore: modify request query params for calendar layout
* refactor: remove console logs and add comments
* chore: removed demo m-store routes
* cycles changes
* chore: issues grouped kanban and swimlanes UI and functionality (#2294)
* chore: updated the all the group_by and sub_group_by UI and functionality render in kanban
* chore: kanban sorting in mobx and ui updates
* chore: ui changes and drag and drop functionality changes in kanban
* chore: issues count render in kanban default and swimlanes
* chore: Added icons to the group_by and sub_group_by in kanban and swimlanes
* refactor: filter components, constants and helper functions (#2297)
* refactor: filters and display filters to accept handlers as props
* refactor: filters and display filters folder structure
* refactor: change issue layout options constant structure
* chore: display filters validations
* chore: view less filters functionality
* fix: display filters validation
* refactor: wrap functions around useCallback
* chore: start and target date filter options added
* refactor: query params generator function
* fix: query params generator function
* dev: gantt chart implementation using MobX (#2302)
* dev: fetch project gantt issues using mobx
* chore: handle group by options in the kanban layout
* dev: spreadsheet layout implementation using MobX (#2306)
* dev: implement spreadsheet view using mobx
* refactor: remove console logs and props
* chore: refactoring cycles list
* feat: adding additional ui components
* dev: applied filters list implementation using MobX (#2325)
* dev: applied filters list UI
* fix: filter item height
* chore: remove unnecessary classes
* fix: params generator
* fix: cycles views list and board
* fix: cycles list rendering fixes
* fix: layout fixes
* refactor: filter components (#2359)
* fix: calendar layout dividers
* refactor: filter selection components
* fix: dropdown closing after selection
* refactor: filters components
* chore: issue properties for list and kanban layouts and implemented estimates in project store (#2363)
* chore: issue properties for state, priorit, labels and members
* feat: implemented assignee, labels properties
* fix: implemented estimates in project store and issue properties
* chore: staer_date and due_date and validation properties in kanban
* chore: filters import conflict
* dev: setup module and module filter store (#2364)
* dev: implement module issues using mobx store
* dev: module filter store setup
* chore: module store crud operations
* chore: issue list layout (#2367)
* chore: merge develop (#2388)
* fix: build erros
* chore: cycles, modules store integration, list and kanban layouts and updated kanban logic (#2399)
* chore: cycle, cycle-issue, cycle-filters, cycle-kanban, cycle layout setup
* chore: cycles kanban and list view store
* chore: cycles, modules kanban and list, kanban view store
* refactor: change naming convention (#2383)
* fix:auth layer revamp
* chore: Implemented list and kanban views in project modules (#2402)
* chore: updated kanban logic in project cycles and modules
* chore: updated list and kanban in module
* dev: implement global views using MobX (#2404)
* fix: selfhosted fixes (#2154)
* fix: selfhosted fixes
* fix: updated env example
* chore: dynamic position dropdown (#2138)
* chore: dynamic position state dropdown for issue view
* style: state select dropdown styling
* fix: state icon attribute names
* chore: state select dynamic dropdown
* chore: member select dynamic dropdown
* chore: label select dynamic dropdown
* chore: priority select dynamic dropdown
* chore: label select dropdown improvement
* refactor: state dropdown location
* chore: dropdown improvement and code refactor
* chore: dynamic dropdown hook type added
---------
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
* fix: fields not getting selected in the create issue form (#2212)
* fix: hydration error and draft issue workflow
* fix: build error
* fix: properties getting de-selected after create, module & cycle not getting auto-select on the form
* fix: display layout, props being updated directly
* chore: sub issues count in individual issue (#2221)
* Implemented nested issues in the sub issues section in issue detail page (#2233)
* feat: subissues infinte level
* feat: updated UI for sub issues
* feat: subissues new ui and nested sub issues in issue detail
* chore: removed repeated code
* refactor: product updates modal layout (#2225)
* fix: handle no issues in custom analytics (#2226)
* fix: activity label color (#2227)
* fix: profile issues layout switch (#2228)
* fix: issues resolved in sub issues (#2238)
* fix: aws region name (#2234)
* chore: updated docker naming conventions (#2239)
* naming convention changes
* dev: update docker-compose-hub in consistent with docker-compose
* dev: updated docker container name
---------
Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
* chore: added state and priority order in workspace user profile (#2241)
* fix: changed priority from None to none (#2229)
* fix: cycle and module stats when issues are archived (#2185)
* fix: cycle and module stats when issues are archived
* fix: added draft filter
---------
Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
* feat: quick add (#2240)
* feat: quick add
* style: made text color muted
* chore: added epoch in draft (#2244)
* chore: added epoch in draft
* chore: removed extra spaces
* fix: resolved pending issue graph in analytics, user wishes in dashboard, and typo in projects list (#2247)
* style: settings page improvement (#2211)
* style: settings page improvement
* style: toggle switch styling
---------
Co-authored-by: Anmol Singh Bhatia <asb@Anmols-MacBook-Pro.local>
* chore: changed priority props in workspace and project (#2253)
* fix: bug fix related to fetching dropdown options for the profile issue (#2246)
* fix: sub issue state and member select build error (#2254)
* rename view to layout (#2255)
Co-authored-by: Your Name <you@example.com>
* fix: bug fixes and ui improvement (#2250)
* dev: remove auto filter endpoint
* feat: quick-add placement in spreadsheet and gantt (#2259)
* feat: sticking quick-add at the bottom of the screen
fix: opening create issue modal instead of quick-add in draft-issues, my-issue and profile page
* fix: build error due to dynamic import
* fix: draft issue delete not working (#2249)
* fix: draft issue not deleting, project can't be changed in draft issue modal
* fix: removed mutation for view where draft issues are not shown
* fix: inline create issue for draft issue
* fix: clearing data from localstorage on discard click
* feat: Add peek overview in sub issues and updated UI for empty states. (#2263)
* chore: add tooltip to show full time on activity logs (#2235)
* fix: issue automation iterable error (#2208)
* fix: n+1 queries for cycle list and project member endpoints (#2257)
* [fix] nginx continuously rewriting and reloading on index page of spaces app (#2236)
* chore: shifted index page to /home route
* chore: added rewrite logic, to rewrite index to /home
* chore: routed home to login route as login page
* chore: updated nginx config to route to login
* chore: updated path for home
* dev: migration for 0.13 (#2266)
* dev: updated migrations
* dev: migration for 0.13
* dev: re-split migrations into two different files (#2268)
* dev: split issue activity migration separate files
* dev: resplit migrations into two different files
* dev: changed the batch size
* chore: udpate date filters to support dynamic options
* fix: bugs in quick-add and draft issues (#2269)
* fix: 'Last Drafted Issue' making sidebar look weird on collapsed
* feat: scroll to the bottom when issue is created
* fix: 'Add Issue' button overlapping issue card in spreadsheet view
* fix: wrong placement of quick-add in calender layout
* fix: spacing for issue card in spreadsheet view
* chore: add instructions to contributing guide (#2270)
* chore: add instructions to contributing guide
* dev: update contributing.md to use the new configuration
---------
Co-authored-by: Nikhil <118773738+pablohashescobar@users.noreply.github.com>
* fix: user dashboard greeting timezone (#2267)
* chore: user greeting timezone
* fix: group by labels not working on workspace level
* feat: workspace global view, style: spreadsheet view revamp (#2273)
* chore: workspace view types, services and hooks added
* style: spreadsheet view revamp and code refactor
* feat: workspace view
* fix: build fix
* chore: sidebar workspace issues redirection updated
* style: gantt layout quick-add padding (#2272)
* fix: 'Last Drafted Issue' making sidebar look weird on collapsed
* feat: scroll to the bottom when issue is created
* fix: 'Add Issue' button overlapping issue card in spreadsheet view
* fix: wrong placement of quick-add in calender layout
* fix: spacing for issue card in spreadsheet view
* style: gantt layout quick-add padding
style: removed 'State group' from draft issue
* style: decrese shadow, quick-add position on calender layout, and 'add issue' sticky
* style: button color
* fix: block click happening while moving (#2275)
* dev: refactor date filters to a single function
* chore: handle calendar date range in frontend (#2277)
* chore: gantt chart empty state (#2279)
* chore: gantt empty state
* chore: Add heading to the gantt sidebar
* style: calender quick-add same width as single date (#2280)
* style: calender quick-add same width as single date
* style: margin bottom in quick-add in spreadsheet view
* fix: quick add opening in list-layout
* style: reduced margin left
* chore: updated created at in draft issue (#2278)
* chore: make target dates inclusive when filtering (#2276)
* chore: sort order and issue props for global views (#2283)
* chore: removed project filter (#2284)
* fix: inbox issue deletes (#2290)
* chore: views (#2288)
* chore: global views order by
* chore: update permissions for global views
---------
Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
* chore: fetch issues from previous and next month in the calendar view (#2282)
* fix: issue activity estimate value bug fix (#2281)
* fix: issue activity estimate value bug fix
* fix: activity typo fix
* fix: ui and bugs (#2289)
* fix: 24 character limit on first & last name in onboarding page
* fix: no option: 'Add Issue' in archive issue page
* fix: in archive issue directly sending to issue detail page
* fix: issue type showing in archive issue
* fix: custom menu overflowing
* fix: changing subscriber in filters has no effect
* style: border in quick-add
* fix: on onboarding member role overflowing
* fix: inconsistent icons in issue detail
* style: spacing, borders and shadows in quick-add
* fix: custom menu truncate
* fix: notifications for created by me and assigned to me (#2292)
* chore: workspace view display filters and properties , code refactor (#2295)
* chore: spreadsheet view context
* chore: spreadsheet context provider
* chore: spreadsheet view context
* chore: display filters and properties added in workspace view and code refactor
* fix: build error fix
* chore: set sub-issue display option to false for global views
---------
Co-authored-by: gurusainath <gurusainath007@gmail.com>
* chore: label create error (#2299)
* chore: global issues ui improvement and bug fixes (#2300)
* chore: workspace view mutation fix ,bug fixes and code refactor (#2301)
* chore: workspace view mutation fix ,bug fixes and code refactor
* chore: update workspace view toast alert added
* chore: workspace view order by removed (#2303)
* dev: updated migrations for 0.13-dev (#2305)
* chore: epoch migration batch size changed
* chore: reoredered the migration files
* dev: updated migrations for 0.13-dev
* chore: added epoch field
* dev: merged the migration files
* fix: workspace view filters count fix (#2307)
* fix: unsplash api fix (#2310)
* fix: workspace view redirection fix, style: spreadsheet view shadow scroll fix (#2314)
* fix: workspace view redirection fix
* style: spreadsheet view scroll shadow fix
* fix: update build workflow for the deploy app (#2315)
* fix: workspace view add issue mutation fix (#2317)
* dev: create action to sync PR changes to the repo (#2333)
* fix: ui package readme added (#2334)
* fix: variable name for token (#2336)
* dev: update add permissions to the action (#2337)
* dev: rename token variables (#2338)
* fix: updated readme fixes (#2339)
* dev: update sync workflow to run only when the source repo is configured (#2346)
* dev: update sync workflow to run only when the source repo is configured
* fix: naming convention changes
---------
Co-authored-by: sriramveeraghanta <veeraghanta.sriram@gmail.com>
* fix: issue relation mutation and draft issue (#2340)
* fix: issue relation mutation and draft issue
* fix: 'New Issue' in gantt view
fix: emoji select going under
* fix: profile page typo
* fix: sync workflow fixes (#2365)
* fix: sync job pr description escaped values fix (#2366)
* Update index.tsx (#2343)
Fixes #2342
* dev: update apiserver configuration files (#2348)
* dev: update apiserver configuration files
* dev: add email and minio redirection urls
* fix: themening validation in store init. (#2350)
* chore: member can change role (#2371)
* chore: removed the issue draft log from my profile (#2368)
* adding sync info in pr title (#2373)
* chore: layout access validation and switch in plane deploy issues route (#2351)
* chore: handled route validation and layout access validation in plane deploy issues
* chore: impoved validation condition
* show current version in the help section dropdown (#2353)
* fix: table menu positioning (#2354)
* fix: handle cross project issues in the sub-issues. (#2357)
* fix: login process validation based on api config (#2361)
* dev: configuration endpoint for frontend client (#2355)
* dev: configuration endpoint for frontend clients
* dev: configuration enable magic and email/password signup
* dev: update unsplash keys
* dev: add unsplash API and add env for magic login
* fix: 404 when redirecting user clicks on Sign In button (#2349)
* fix: 404 when redirecting user to login page
* fix: next_path redirection not working
* fix: authentication workflow update in plane deploy
---------
Co-authored-by: gurusainath <gurusainath007@gmail.com>
* fix: project setting member role validation (#2369)
* fix: project setting member role validation
* chore: opacity removed from member setting page
* chore: member setting page validation
* chore: project covers endpoint (#2370)
* chore: project covers endpoint
* dev: remove print logs
* dev: formatting
---------
Co-authored-by: sriramveeraghanta <veeraghanta.sriram@gmail.com>
* feat: default project cover images tab on the change cover popover (#2375)
* feat: default project cover images tab
* chore: remove unnecessary env vars from turbo.json
* chore: remove unnecessary OAuth envs (#2378)
* chore: remove unnecessary oauth envs
* merge conflicts resolved
* fix: adding new service
---------
Co-authored-by: sriramveeraghanta <veeraghanta.sriram@gmail.com>
* fix: added user store variables in mobx store observable (#2380)
* fix: state group icons (#2381)
* fix: removed default theme setting in the index page (#2382)
* fix: removed default theme setting in the index page
* fix: empty space
* dev: global views and workspace filters store implemented
* sync CE Master to EE Develop
* refactor: create update view modal
* chore: static issue global views
* refactor: remove old code
* refactor: filters select dropdown
* chore: fix calendar layout
* chore: mobx store for new applied filters
* chore: dded search functionality
---------
Co-authored-by: Vamsi Kurama <vamsi.kurama@gmail.com>
Co-authored-by: Nikhil <118773738+pablohashescobar@users.noreply.github.com>
Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com>
Co-authored-by: Dakshesh Jain <65905942+dakshesh14@users.noreply.github.com>
Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com>
Co-authored-by: guru_sainath <gurusainath007@gmail.com>
Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
Co-authored-by: Anmol Singh Bhatia <asb@Anmols-MacBook-Pro.local>
Co-authored-by: Rhea Jain <65884341+rhea0110@users.noreply.github.com>
Co-authored-by: Your Name <you@example.com>
Co-authored-by: pablohashescobar <nikhilschacko@gmail.com>
Co-authored-by: Henit Chobisa <chobisa.henit@gmail.com>
Co-authored-by: Thomas <git@thomasync.dev>
Co-authored-by: Luis Cruz <55716036+luis-cruzt@users.noreply.github.com>
Co-authored-by: Manish Gupta <manish@mgupta.me>
* fix: Auth fixes and Layout fixes (#2408)
* fix: auth fixes and layout improvements
* fix: layout fixes
* fix: analytics page fixes
* dev: implemented project views using MobX (#2410)
* dev: implemented project views list using mobx
* style: views list UI
* dev: implemented view issues page using mobx
* refactor: project view issues fetching
* chore: plane ui library component and code refactor (#2406)
* chore: swap input component with plane/ui package
* chore: swap textarea component with plane/ui package
* chore: swap button component with plane/ui package
* chore: button component revamp
* fix: button type fix
* chore: secondary button revamp
* chore: button props updated
* chore: swap loader component with plane/ui package
* fix: build error fix
* chore: button component refactor
* chore: code refactor
* chore: swap toggle switch component with plane/ui package
* chore: swap spinner component with plane/ui package
* chore: swap progress bar componenet with plan/ui package
* chore: code refactor
* fix: gitignore fixes
* fix: project card fixes
* chore: ui component revamp (#2415)
* chore: swap tooltip component with plane ui package
* chore: swap linear progress component with plane ui package
* fix: login button fix
* chore: implement new worksapace wrapper for global views (#2412)
* chore: implement new worksapace wrapper for global views pages
* fix: merge conflicts
* fix: merge conflicts
* dev: add remaining layouts to cycle (#2413)
* fix: workspace auth wrapper changes
* chore: project card revamp and refactor (#2416)
* removing dist from ui
* refactor: analytics (#2419)
* refactor: helper functions
* chore: updated all the page headers
* refactor: custom analytics
* refactor: project analytics modal
* refactor: folder structure, remove junk code (#2423)
* refactor: folder structure
* chore: ad order by target date option
* refactor: remove old layout components
* refactor: inbox folder structure
* fix: services fixes
* fix: store imports changes
* fix: services export fixes
* fix: services implementation fixes
* fix: build issue fixes
* fix: react library fixes
* refactor: MobX store folder structure (#2435)
* refactor: store folder structure
* chore: update import statements
* fix: service import errors (#2436)
* fix: service imports
* chore: update service imports in store
* chore: fix remianing service imports
* build fixes
* editor ts config fixes
* fix: turbo and build fixes
* fix: Auth screen loading implementation
* fix: build issues
* fix: turbo settings for ui package
---------
Co-authored-by: gurusainath <gurusainath007@gmail.com>
Co-authored-by: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com>
Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com>
Co-authored-by: Dakshesh Jain <65905942+dakshesh14@users.noreply.github.com>
Co-authored-by: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com>
Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
Co-authored-by: Vamsi Kurama <vamsi.kurama@gmail.com>
Co-authored-by: Nikhil <118773738+pablohashescobar@users.noreply.github.com>
Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
Co-authored-by: Anmol Singh Bhatia <asb@Anmols-MacBook-Pro.local>
Co-authored-by: Rhea Jain <65884341+rhea0110@users.noreply.github.com>
Co-authored-by: Your Name <you@example.com>
Co-authored-by: pablohashescobar <nikhilschacko@gmail.com>
Co-authored-by: Henit Chobisa <chobisa.henit@gmail.com>
Co-authored-by: Thomas <git@thomasync.dev>
Co-authored-by: Luis Cruz <55716036+luis-cruzt@users.noreply.github.com>
Co-authored-by: Manish Gupta <manish@mgupta.me>
2023-10-15 18:20:12 +00:00
|
|
|
const { cycleId, moduleId, viewId, projectId, viewGanttParams, ganttParams } = options;
|
2023-09-22 10:01:54 +00:00
|
|
|
|
|
|
|
const ganttFetchKey = cycleId
|
|
|
|
? { ganttFetchKey: CYCLE_ISSUES_WITH_PARAMS(cycleId.toString(), ganttParams) }
|
|
|
|
: moduleId
|
2024-03-06 13:09:14 +00:00
|
|
|
? { ganttFetchKey: MODULE_ISSUES_WITH_PARAMS(moduleId.toString(), ganttParams) }
|
|
|
|
: viewId
|
|
|
|
? { ganttFetchKey: VIEW_ISSUES(viewId.toString(), viewGanttParams) }
|
|
|
|
: { ganttFetchKey: PROJECT_ISSUES_LIST_WITH_PARAMS(projectId?.toString() ?? "", ganttParams) };
|
2023-09-22 10:01:54 +00:00
|
|
|
|
|
|
|
return {
|
|
|
|
...ganttFetchKey,
|
|
|
|
};
|
|
|
|
};
|
2023-11-27 13:11:59 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @returns {boolean} true if searchQuery is substring of text in the same order, false otherwise
|
|
|
|
* @description Returns true if searchQuery is substring of text in the same order, false otherwise
|
|
|
|
* @param {string} text string to compare from
|
|
|
|
* @param {string} searchQuery
|
|
|
|
* @example substringMatch("hello world", "hlo") => true
|
|
|
|
* @example substringMatch("hello world", "hoe") => false
|
|
|
|
*/
|
|
|
|
export const substringMatch = (text: string, searchQuery: string): boolean => {
|
|
|
|
try {
|
|
|
|
let searchIndex = 0;
|
|
|
|
|
|
|
|
for (let i = 0; i < text.length; i++) {
|
|
|
|
if (text[i].toLowerCase() === searchQuery[searchIndex]?.toLowerCase()) searchIndex++;
|
|
|
|
|
|
|
|
// All characters of searchQuery found in order
|
|
|
|
if (searchIndex === searchQuery.length) return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Not all characters of searchQuery found in order
|
|
|
|
return false;
|
|
|
|
} catch (error) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
};
|
2023-11-29 13:37:33 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @returns {boolean} true if email is valid, false otherwise
|
|
|
|
* @description Returns true if email is valid, false otherwise
|
|
|
|
* @param {string} email string to check if it is a valid email
|
|
|
|
* @example checkEmailIsValid("hello world") => false
|
|
|
|
* @example checkEmailIsValid("example@plane.so") => true
|
|
|
|
*/
|
|
|
|
export const checkEmailValidity = (email: string): boolean => {
|
|
|
|
if (!email) return false;
|
|
|
|
|
|
|
|
const isEmailValid =
|
|
|
|
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
|
|
|
|
email
|
|
|
|
);
|
|
|
|
|
|
|
|
return isEmailValid;
|
|
|
|
};
|
2024-02-26 10:41:35 +00:00
|
|
|
|
|
|
|
export const isEmptyHtmlString = (htmlString: string) => {
|
|
|
|
// Remove HTML tags using regex
|
|
|
|
const cleanText = DOMPurify.sanitize(htmlString, { ALLOWED_TAGS: [] });
|
|
|
|
// Trim the string and check if it's empty
|
|
|
|
return cleanText.trim() === "";
|
|
|
|
};
|