Hey @Nad
Sorry about the delay in replying to your questions - wanted to make sure I was thorough in my response. Replying to your questions with the same numbering you’ve used:
-
In packs, you define columns as a JavaScript object, with column names as property names of that object. Much like SQL and XANO column names, you can’t have spaces in property names; but it’s expected to have spaces in column names in Coda. So Coda converts CamelCase
or snake_case
property names into Title case
column names. I do agree it’s a little annoying in this particular pack’s case, but there’s nothing we can do about it unfortunately.
-
The XANO API returns images as a URL and packs supports images as a reference (ie, Image URL column) or as an attachment (ie Image column). So it’s totally possible for us to change how images work in the sync table. That’ll mean multiple images will pull in correctly. I actually intended image columns to not be editable row properties. You’ve clearly picked up a bug there, sorry! I’ll push an update in the next day or two.
Why I thought it best to not allow image edits… When row edits sync in packs, the whole row is sent for updates (not just the particular cell you’ve edited) so I was worried that sending images through for every update would make that quite slow. You’d be sending the same images back to XANO every time even if you didn’t change them. Are image edits something you expect to need? I could look into seeing if there’s a decent solution.
-
Let me look into that. I can’t find any documentation in the packs SDK, but let me shoot the team a message.
-
We originally did try to pretty up the filtering UI but every iteration meant limiting functionality. My thinking was the likely target market for the pack would probably prefer power over ease of use. Definitely something I was hoping we could confirm with user feedback!
> Then what ? Do I need to make the user hit a button to trigger a RefreshTable() every time they change the filter?
That’d work. Just make sure you switch off the “Keep unsynced rows” option under Table Options.
> What happens when they need to insert or delete a row into the filetered view they see? does every call to your pack’s AddRow and DeleteRows() function need to be followed by a RefreshTable() call on all the potentially affected sync tables?
That’s correct - pack action formulas (IE the actions you’d run with a button press) don’t automatically cause sync tables to resync. To improve the UX here, I’d recomment you use RunActions() to automate a RefreshTable() after addition/deletion of rows.
- You’re right - if you’re expecting multiple people to concurrently edit rows across multiple docs or other systems, you could run into the issue of users overwriting other users’ updates. Coda sync tables don’t support “live updates” in that way. In practice, you’ll need to determine if this is something you can work around or if it voids the use case.
> I don’t want to sound like I’m hating on your work here and I can definitely see you’ve put a tremendous amount of effort into this. I am just trying to clearly define the limitations before I invest more of my time into this.
It’s all good, I’m not feeling hated on at all. You’ve given really helpful feedback.
> I am curious to know whether you genuinely see Coda as a viable front-end builder. Once we’ve gone through the pain of migrating data to a BaaS such as Xano, maybe the wise thing would be to go all the way and also migrate away from Coda to a dedicated no/low-code front-end builder? I use Coda first and foremost as an internal tool builder and I love it. But I sadly find myself seriously considering this migration, as I am tired of hitting the “Coda performance wall” and ever waiting for better permissions and granular sharing.
Yeah I really do. I come from web development background, and have like decades of experience building SQL databases, and nowadays Coda’s somehow become my primary driver for almost everything. I do definitely have to implement some tricky workarounds from time to time, but it’s almost never impossible to get the job done. If you’d like some input on your specific project, you’re welcome to reach out. I very much enjoy pushing the boundaries a bit 