Profile level : Anon
- First name
- Last name
- Job title
- Work experience
- Tags
- Avatar
- Cover
- Description
Filling out more of your profile gets you higher rankings in the directory and increases community trust.
Announcements
Pagination
- Previous page
- Page 2
- Next page
Recent templates
Title | Category | |
---|---|---|
React Pivot Table | Building block | |
Vertical Timeline | Custom widget | |
Tonejs Synth | ||
Ideas Tracker with Appwrite + Appsmith | Starter template | |
Swiggy Expense Tracker | Use case |
Pagination
Your points
Total Points
0
Contribution
0
Engagement
0
Visit
0
Recent comments
I created a data source via a REST API connected to the Google Calendar API in Appsmith. As mentioned, however, the data source keeps asking me to reauthorize every few days. It is getting quite boring
In reply to Hi almirgarcia, here's a few… by joseph_appsmith
Tx Sr. :D
Hi almirgarcia, here's a few more that are more advanced:
there is any kind of advance videos for googlesheets?
In reply to hi!what's the difference… by dll
In the current version, the items will shrink on smaller screens, and if the container is set to "auto-height", then that will adjust as well. However, this sometimes doesn't scale well.
The NEW system (codename Anvil) is much "smarter" - it will also allow containers to flow and adapt to fit better. The results are much more impressive and produce more reliable results across all device sizes.
In reply to I'm not seeing an easy way… by pchambless1
It looks like you can directly connect to a SQL database from Appwrite: https://github.com/appwrite/appwrite/discussions/4957
However, it does look like it is a bit of a pain and not encouraged. Appwrite wants to be the main DB all in one place. It would probably be best to either migrate the data into Appwrite, or just connect to it directly in Appsmith. Since you can connect to MySQL and Appwrite in the same app, it shouldn't be too tough.
In reply to Does this work in self… by sparrenberg
The community edition supports:
- email/pass
- Google Auth
- Github Auth
SSO is available in the Enterprise edition.
In reply to Hi, Helpful tutorial but... … by drreech
Hi - I've not tested this, but I found some information that might help. Let me know if this works!
To set up Office 365 as an SMTP datasource in Appsmith, follow these steps to configure the SMTP settings accurately. This will allow you to send emails from your Appsmith application using your Office 365 account.
Step 1: Gather Office 365 SMTP Details
First, you need to have the correct SMTP server details for Office 365. Here are the general settings:
- SMTP Server: smtp.office365.com
- SMTP Port: 587
- SMTP Username: Your Office 365 email address
- SMTP Password: Your Office 365 password
Step 2: Enable SMTP Authentication in Office 365
Ensure that SMTP authentication is enabled in your Office 365 account. This might require you to set up and use an app password, especially if you have two-factor authentication enabled.
- Log in to your Office 365 account.
- Go to the Security & privacy section.
- Create an app password that you can use with Appsmith.
Step 3: Configure SMTP Datasource in Appsmith
Now, let's configure the SMTP datasource in Appsmith:
- Open your Appsmith dashboard.
-
Go to the Datasources section and click on
- New Datasource
.
-
Choose SMTP from the available options.
- Enter the SMTP configuration details:
- SMTP Host: smtp.office365.com
- SMTP Port: 587
- Username: Your Office 365 email address
- Password: Your Office 365 password or app password
- From Address: The email address you want to use as the sender
- Use SSL/TLS: Toggle this to Yes.
- Click Test to verify the connection. If everything is configured correctly, you should see a success message.
- Save the datasource.
Step 4: Send an Email Using SMTP
After setting up the datasource, you can send an email using a button or any other trigger in your Appsmith application.
- Drag a Button widget onto your canvas.
- Set the onClick action to Execute a Query.
- Create a new query associated with your SMTP datasource.
-
Use the following template for the query:
{ "to": ["recipient@example.com"], "subject": "Test Email from Appsmith", "body": "Hello, this is a test email sent from Appsmith using Office 365 SMTP." }
- Save and run the query to send the email.
Troubleshooting
If you encounter issues:
- Ensure that the email credentials and server details are correct.
- Check if your Office 365 account requires an app password.
- Verify that your Office 365 account has permissions to send emails via SMTP.
Great summary on variable declarations in JavaScript! Understanding when to use var, let, and const is essential for writing clean and maintainable code. I found the explanation about block scope and hoisting particularly helpful.
Thanks Oscar! Glad you liked it. Let me know if there are any other topics you'd like us to cover.
This post is simply great, and I'm pretty sure it will be useful for anyone starting with Appsmith, and even those who are more advanced, I'll save it to keep it as a reference. Thanks, Joseph
Hi,
Helpful tutorial but... I'm wondering if you've looked into a similar solution for office 365? My firm uses that, and I cannot seem to get Appsmith to authenticate as I keep getting "Authentication failure", and can't find the equivalent of a generate an App Password for your Gmail account for Microsoft.
Thanks!
Great article, but there's one small issue. The behavior of map
and reduce
is the same as forEach
for sparse arrays. All 3 higher order functions skip over empty items.
The result won't be the same as the one shared in the example of map
let sparseArray = [1, , 3, , 5];
// map also skips over empty elements, so it would never call the function for empty item at index 1
// and item at index 3.
let filledArray = sparseArray.map((num, index) => num === undefined ? null : num);
// answer won't be this
console.log(filledArray); // [1, null, 3, null, 5]
// Rather answer would be
// console.log(filledArray); // [1, empty, 3, empty, 5]
Similarly for reduce, it also skips over empty items in an array. So the code shared in it's example can be changed and it would give us the same result. Please refer the following:
let sparseArray = [1, , 3, , 5];
// function won't be called for empty items.
let sum = sparseArray.reduce((acc, num) => acc + (num || 0), 0);
// So the above function can be changed to this and it will still give same result(9)
// No need to check if num is present or not, as it won't even call the function for empty value.
let sum = sparseArray.reduce((acc, num) => acc + num, 0);
console.log(sum); // 9
I tried this on myself... Below is my results.
Sometimes for of is slower than forEach, Map is definitely slowest. I tested it in a few order for more accurate, but map is always a slowest and results is similar like below.
Tested on Mac Studio M1 Max.
First results:
map: 31.096923828125 ms
forEach: 14.196044921875 ms
forof: 16.885986328125 ms
for: 6.1611328125 ms
forsepconst: 6.281982421875 ms
Second results:
map: 27.2080078125 ms
forEach: 17.361083984375 ms
forof: 14.570068359375 ms
for: 6.177001953125 ms
forsepconst: 6.3369140625 ms
Third results, with uncommented querySelectorAll:
map: 2184.64697265625 ms
forEach: 2154.363037109375 ms
forof: 2177.132080078125 ms
for: 2176.41015625 ms
forsepconst: 2166.047119140625 ms
{
console.time('map');
// eslint-disable-next-line no-unused-vars
const results = largeArray.map((num) => {
//document.querySelectorAll('.b-example');
return (((num * 2 - 5 / 0.5 + 1) * 2) / 3) * num;
});
console.timeEnd('map');
}
{
const results = [];
console.time('forEach');
largeArray.forEach((num) => {
//document.querySelectorAll('.b-example');
results.push((((num * 2 - 5 / 0.5 + 1) * 2) / 3) * num);
});
console.timeEnd('forEach');
}
{
const results = [];
console.time('forof');
for (const num of largeArray) {
//document.querySelectorAll('.b-example');
results.push((((num * 2 - 5 / 0.5 + 1) * 2) / 3) * num);
}
console.timeEnd('forof');
}
{
const results = [];
console.time('for');
for (let i = 0; i < largeArray.length; i++) {
//document.querySelectorAll('.b-example');
results.push((((largeArray[i] * 2 - 5 / 0.5 + 1) * 2) / 3) * largeArray[i]);
}
console.timeEnd('for');
}
{
const results = [];
console.time('forsepconst');
for (let i = 0; i < largeArray.length; i++) {
const num = largeArray[i];
//document.querySelectorAll('.b-example');
results.push((((num * 2 - 5 / 0.5 + 1) * 2) / 3) * num);
}
console.timeEnd('forsepconst');
}
Does this work in self-hosted community edition?
I'm not seeing an easy way to connect Appwrite to an existing MySQL database. I see it is discouraged in some of my Googling. Is this the case? Should I not use Appwrite as a way to connect to existing data?
In reply to Mermaid.JS also supports… by joseph_appsmith
Hi Joseph, Brilliant:) got this working but struggling with the click event. Just need it to run a script but the example they show on the docs page is about printing. Do you have a demo of running a script from a click?
Thanks
Patrick
One of these days I gotta jump on to the JSPDF library. I'm making most of my reports, and it's quite a few, in Custom Widgets. Thanks, Joseph!
hi!what's the difference between auto-layout before?
Hi darasabahi, it sounds like your datasource is missing the
access_type : offline
custom header. It will work without this, but then the refresh token fails.Please try reauthorizing the datasource and add the
access_type : offline
header under the custom auth headers section.