## Description ### Fixes - [x] https://github.com/appsmithorg/appsmith/issues/19383 - [x] https://github.com/appsmithorg/appsmith/issues/19384 - [x] https://github.com/appsmithorg/appsmith/issues/19385 - [x] https://github.com/appsmithorg/appsmith/issues/19386 - [x] https://github.com/appsmithorg/appsmith/issues/19387 - [x] https://github.com/appsmithorg/appsmith/issues/19388 - [x] https://github.com/appsmithorg/appsmith/issues/19389 - [x] https://github.com/appsmithorg/appsmith/issues/19390 - [x] https://github.com/appsmithorg/appsmith/issues/19391 - [x] https://github.com/appsmithorg/appsmith/issues/19392 - [x] https://github.com/appsmithorg/appsmith/issues/19393 - [x] https://github.com/appsmithorg/appsmith/issues/19394 - [x] https://github.com/appsmithorg/appsmith/issues/19395 - [x] https://github.com/appsmithorg/appsmith/issues/19396 - [x] https://github.com/appsmithorg/appsmith/issues/19397 - [x] https://github.com/appsmithorg/appsmith/issues/19398 - [x] https://github.com/appsmithorg/appsmith/issues/19399 - [x] https://github.com/appsmithorg/appsmith/issues/19400 - [x] https://github.com/appsmithorg/appsmith/issues/19401 - [x] https://github.com/appsmithorg/appsmith/issues/19402 - [x] https://github.com/appsmithorg/appsmith/issues/19403 - [x] https://github.com/appsmithorg/appsmith/issues/19404 - [x] https://github.com/appsmithorg/appsmith/issues/19405 - [x] https://github.com/appsmithorg/appsmith/issues/19406 - [x] https://github.com/appsmithorg/appsmith/issues/19407 - [x] https://github.com/appsmithorg/appsmith/issues/19408 - [x] https://github.com/appsmithorg/appsmith/issues/19409 Fixes # (issue) > if no issue exists, please create an issue and ask the maintainers about this first Media > A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (fix or feature that would cause existing functionality to not work as expected) - Chore (housekeeping or task changes that don't impact user perception) - This change requires a documentation update ## How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Provide instructions, so we can reproduce. > Please also list any relevant details for your test configuration. > Delete anything that is not important - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Ankita Kinger <ankita@appsmith.com> Co-authored-by: akash-codemonk <67054171+akash-codemonk@users.noreply.github.com> Co-authored-by: Tanvi Bhakta <tanvi@appsmith.com> Co-authored-by: Arsalan <arsalanyaldram0211@outlook.com> Co-authored-by: Aman Agarwal <aman@appsmith.com> Co-authored-by: Rohit Agarwal <rohit_agarwal@live.in> Co-authored-by: Nilesh Sarupriya <nilesh@appsmith.com> Co-authored-by: Nilesh Sarupriya <20905988+nsarupr@users.noreply.github.com> Co-authored-by: Tanvi Bhakta <tanvibhakta@gmail.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local> Co-authored-by: Vijetha-Kaja <vijetha@appsmith.com> Co-authored-by: Parthvi <80334441+Parthvi12@users.noreply.github.com> Co-authored-by: Apple <nandan@thinkify.io> Co-authored-by: Saroj <43822041+sarojsarab@users.noreply.github.com> Co-authored-by: Sangeeth Sivan <74818788+berzerkeer@users.noreply.github.com> Co-authored-by: Ashok Kumar M <35134347+marks0351@users.noreply.github.com> Co-authored-by: Aishwarya-U-R <91450662+Aishwarya-U-R@users.noreply.github.com> Co-authored-by: rahulramesha <rahul@appsmith.com> Co-authored-by: Aswath K <aswath.sana@gmail.com> Co-authored-by: Preet Sidhu <preetsidhu.bits@gmail.com> Co-authored-by: Vijetha-Kaja <119562824+Vijetha-Kaja@users.noreply.github.com> Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
225 lines
9.3 KiB
HTML
Executable File
225 lines
9.3 KiB
HTML
Executable File
<!DOCTYPE html>
|
||
<html lang="en">
|
||
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
||
<title>Appsmith</title>
|
||
<style>
|
||
#loader {
|
||
position: fixed;
|
||
left: 0;
|
||
top: 0;
|
||
height: 4px;
|
||
background: #D7D7D7;
|
||
transition: all ease-in 0.3s;
|
||
}
|
||
</style>
|
||
<%=
|
||
(function () {
|
||
// This code emits additional `link rel="preload"` tags for edit.html and view.html.
|
||
// This helps to load edit and view modes faster.
|
||
//
|
||
// If you code-split some code and need to preload it as well, here’s how to do that:
|
||
// 1) Give your import a name (use the `webpackChunkName` comment: `import(/* webpackChunkName: "my-name" */ "./my-file")`)
|
||
// 2) Add the name into the `chunksToPreload` array below
|
||
let chunksToPreload = [];
|
||
if (htmlWebpackPlugin.options.appsmithHtmlTarget === 'edit-mode') {
|
||
chunksToPreload = [
|
||
...compilation.namedChunkGroups.get("editor").chunks,
|
||
...compilation.namedChunkGroups.get("global-search").chunks,
|
||
]
|
||
} else if (htmlWebpackPlugin.options.appsmithHtmlTarget === 'view-mode') {
|
||
chunksToPreload = [...compilation.namedChunkGroups.get("AppViewer").chunks]
|
||
}
|
||
|
||
return chunksToPreload.flatMap(i => [...i.files])
|
||
.map(url => `<link rel="preload" as="${getPreloadValueForFile(url)}" href="${webpackConfig.output.publicPath + url}" />`)
|
||
.join('\n')
|
||
|
||
function getPreloadValueForFile(fileName) {
|
||
if (fileName.endsWith('.js')) {
|
||
return 'script';
|
||
} else if (fileName.endsWith('.css')) {
|
||
return 'style';
|
||
}
|
||
|
||
throw new Error(`Unknown preload type for file: ${fileName}`);
|
||
}
|
||
})()
|
||
%>
|
||
<script>
|
||
// '' (empty strings), 'false' are falsy
|
||
// could return either boolean or string based on value
|
||
const parseConfig = (config) => {
|
||
if (config.indexOf("__") === 0 || config.indexOf("$") === 0 || config.indexOf("%") === 0)
|
||
return "";
|
||
|
||
const result = config.trim();
|
||
if (result.toLowerCase() === "false" || result === "") {
|
||
return false;
|
||
} else if (result.toLowerCase() === "true") {
|
||
return true;
|
||
}
|
||
|
||
return result;
|
||
}
|
||
const CLOUD_HOSTING = parseConfig("__APPSMITH_CLOUD_HOSTING__");
|
||
const ZIPY_KEY = parseConfig("__APPSMITH_ZIPY_SDK_KEY__");
|
||
if (CLOUD_HOSTING && ZIPY_KEY) {
|
||
const script = document.createElement('script');
|
||
script.crossOrigin = "anonymous";
|
||
script.defer = true;
|
||
script.src = "https://cdn.zipy.ai/sdk/v1.0/zipy.min.umd.js";
|
||
script.onload = () => {
|
||
window.zipy && window.zipy.init(ZIPY_KEY);
|
||
}
|
||
const head = document.getElementsByTagName('head')[0];
|
||
head && head.appendChild(script);
|
||
}
|
||
|
||
// This function is triggered on load of google apis javascript library
|
||
// Even though the script is loaded asynchronously, in case of firefox run on windows
|
||
// The gapi script is getting loaded even before the last script of index.html
|
||
// Hence defining this function before loading gapi
|
||
// For more info: https://github.com/appsmithorg/appsmith/issues/21033
|
||
gapiLoaded = () => {
|
||
window.googleAPIsLoaded = true;
|
||
}
|
||
onError = () => {
|
||
window.googleAPIsLoaded = false;
|
||
};
|
||
</script>
|
||
<!-- Adding this Library to access google file picker API in case of limiting google sheet access -->
|
||
<script async defer id="googleapis" src="https://apis.google.com/js/api.js" onload="gapiLoaded()" onerror="onError()"></script>
|
||
</head>
|
||
|
||
<body class="appsmith-light-theme">
|
||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||
<div id="loader" style="width: 30vw;"></div>
|
||
<!--
|
||
To keep zIndex for tooltips higher than app comments, todo remove when migrating to Tooltip2
|
||
Currently the className does not apply to the portal root, so we're unable to work with z-indexes based on that
|
||
-->
|
||
<div id="header-root"></div>
|
||
<div id="root"></div>
|
||
<div id="date-picker-control" style="position: relative; z-index: 1000;"></div>
|
||
<script type="text/javascript">
|
||
// Ref: https://github.com/Modernizr/Modernizr/blob/94592f279a410436530c7c06acc42a6e90c20150/feature-detects/storage/localstorage.js
|
||
const getIsLocalStorageSupported = () => {
|
||
try {
|
||
window.localStorage.setItem("test", "testA");
|
||
window.localStorage.removeItem("test");
|
||
return true;
|
||
} catch (e) {
|
||
return false;
|
||
}
|
||
};
|
||
const isLocalStorageSupported = getIsLocalStorageSupported();
|
||
|
||
const handleLocalStorageNotSupportedError = () => {
|
||
console.error("Localstorage storage is not supported on your device.");
|
||
}
|
||
|
||
const localStorageUtil = {
|
||
getItem: (key) => {
|
||
if (!isLocalStorageSupported) {
|
||
handleLocalStorageNotSupportedError();
|
||
return;
|
||
}
|
||
return window.localStorage.getItem(key);
|
||
},
|
||
removeItem: (key) => {
|
||
if (!isLocalStorageSupported) {
|
||
handleLocalStorageNotSupportedError();
|
||
return
|
||
}
|
||
return window.localStorage.removeItem(key);
|
||
},
|
||
setItem: (key, value) => {
|
||
if (!isLocalStorageSupported) {
|
||
handleLocalStorageNotSupportedError();
|
||
return;
|
||
}
|
||
return window.localStorage.setItem(key, value);
|
||
}
|
||
};
|
||
window.addEventListener("DOMContentLoaded", (event) => {
|
||
document.getElementById("loader").style.width = "50vw";
|
||
});
|
||
|
||
const registerPageServiceWorker = () => {
|
||
if (
|
||
"serviceWorker" in navigator
|
||
// Disable the service worker in Cypress tests. We primarily do this to make
|
||
// the Performance/LinkRelPreload_Spec.js test work (as it collects URLs all network requests,
|
||
// and service worker requests fail it.) But, anecdotally, disabling the service worker
|
||
// also seems to make the tests a bit faster, as the network load is lower.
|
||
&& !window.Cypress
|
||
) {
|
||
window.addEventListener("load", function () {
|
||
navigator.serviceWorker.register("/pageService.js").catch(error => {
|
||
console.error("Service Worker Registration failed: " + error);
|
||
});
|
||
});
|
||
}
|
||
};
|
||
registerPageServiceWorker();
|
||
</script>
|
||
<script type="text/javascript">
|
||
const LOG_LEVELS = ["debug", "error"];
|
||
const CONFIG_LOG_LEVEL_INDEX = LOG_LEVELS.indexOf(parseConfig("__APPSMITH_CLIENT_LOG_LEVEL__"));
|
||
|
||
const INTERCOM_APP_ID = parseConfig("%REACT_APP_INTERCOM_APP_ID%") || parseConfig("__APPSMITH_INTERCOM_APP_ID__");
|
||
const DISABLE_INTERCOM = parseConfig("__APPSMITH_DISABLE_INTERCOM__");
|
||
|
||
// Initialize the Intercom library
|
||
if (INTERCOM_APP_ID.length && !DISABLE_INTERCOM) {
|
||
(function () { var w = window; var ic = w.Intercom; if (typeof ic === "function") { ic('reattach_activator'); ic('update', w.intercomSettings); } else { var d = document; var i = function () { i.c(arguments); }; i.q = []; i.c = function (args) { i.q.push(args); }; w.Intercom = i; var l = function () { var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'https://widget.intercom.io/widget/' + INTERCOM_APP_ID; var x = d.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); }; if (document.readyState === 'complete') { l(); } else if (w.attachEvent) { w.attachEvent('onload', l); } else { w.addEventListener('load', l, false); } } })();
|
||
}
|
||
|
||
window.SENTRY_CONFIG = parseConfig("__APPSMITH_SENTRY_DSN__");
|
||
window.APPSMITH_FEATURE_CONFIGS = {
|
||
sentry: {
|
||
dsn: parseConfig("__APPSMITH_SENTRY_DSN__"),
|
||
release: parseConfig("__APPSMITH_SENTRY_RELEASE__"),
|
||
environment: parseConfig("__APPSMITH_SENTRY_ENVIRONMENT__"),
|
||
},
|
||
smartLook: {
|
||
id: parseConfig("__APPSMITH_SMART_LOOK_ID__"),
|
||
},
|
||
enableRapidAPI: parseConfig("__APPSMITH_MARKETPLACE_ENABLED__"),
|
||
segment: {
|
||
apiKey: parseConfig("__APPSMITH_SEGMENT_KEY__"),
|
||
ceKey: parseConfig("__APPSMITH_SEGMENT_CE_KEY__"),
|
||
},
|
||
fusioncharts: {
|
||
licenseKey: parseConfig("__APPSMITH_FUSIONCHARTS_LICENSE_KEY__")
|
||
},
|
||
enableMixpanel: parseConfig("__APPSMITH_SEGMENT_KEY__"),
|
||
algolia: {
|
||
apiId: parseConfig("__APPSMITH_ALGOLIA_API_ID__"),
|
||
apiKey: parseConfig("__APPSMITH_ALGOLIA_API_KEY__"),
|
||
indexName: parseConfig("__APPSMITH_ALGOLIA_SEARCH_INDEX_NAME__"),
|
||
},
|
||
logLevel: CONFIG_LOG_LEVEL_INDEX > -1 ? LOG_LEVELS[CONFIG_LOG_LEVEL_INDEX] : LOG_LEVELS[1],
|
||
cloudHosting: CLOUD_HOSTING,
|
||
enableTNCPP: parseConfig("__APPSMITH_TNC_PP__"),
|
||
appVersion: {
|
||
id: parseConfig("__APPSMITH_VERSION_ID__"),
|
||
releaseDate: parseConfig("__APPSMITH_VERSION_RELEASE_DATE__")
|
||
},
|
||
intercomAppID: INTERCOM_APP_ID,
|
||
mailEnabled: parseConfig("__APPSMITH_MAIL_ENABLED__"),
|
||
cloudServicesBaseUrl: parseConfig("__APPSMITH_CLOUD_SERVICES_BASE_URL__") || "https://cs.appsmith.com",
|
||
googleRecaptchaSiteKey: parseConfig("__APPSMITH_RECAPTCHA_SITE_KEY__"),
|
||
hideWatermark: parseConfig("__APPSMITH_HIDE_WATERMARK__"),
|
||
disableIframeWidgetSandbox: parseConfig("__APPSMITH_DISABLE_IFRAME_WIDGET_SANDBOX__"),
|
||
customerPortalUrl: parseConfig("__APPSMITH_CUSTOMER_PORTAL_URL__") || "https://customer.appsmith.com",
|
||
pricingUrl: parseConfig("__APPSMITH_PRICING_URL__") || "https://www.appsmith.com/pricing",
|
||
};
|
||
</script>
|
||
</body>
|
||
|
||
</html>
|