logo

NJP

[E22] You & I Builder Live! Building a Killer Single Page Application (Part 2)

Import · Apr 04, 2024 · video

[Music] [Music] [Music] I can't believe he exposed me like that hello everybody and welcome to you and I Builder live the show where sometimes it works and sometimes it doesn't my name is Maria Gabriella a CH pz vctor and I am joined by my Brad tastic co-host who will now introduce himself my name is Brad hi Brad I thought you were going to do your whole uh no no okay so welcome to you and I Builder live we are a pair of product managers who host this show where um you know you really threw me off by not saying your job title my entire script is just ruined so the first thing that we're going to do today before we get started is I want to plug what we are going to be doing for knowledge as a lot of you may be familiar with it knowledge is the yearly conference that happens in May in Las Vegas and we have a whole bunch of really awesome content that we're going to be bringing you for knowledge so I just wanted to highlight a couple of fun memories here on the bottom left corner you will see a two- scale image of me and Earl and Brad just to show how tall they are it's not that I'm short it's that they are way too tall uh but the first thing I wanted to highlight was that we're going to actually be doing a live you and I Builder live so we need you guys to come join us and Heckle us in person be be respectful and nice keep the same Vibes that we have in chat but come and have fun I have no idea what we're gonna do yet which is par for the course so I can't talk about that but there are other sessions that you can also join Brad can you tell us a little bit about your build a killer single page app lab yeah so also is respectful and nice our normal comment Vibe I don't I'm not sure I like it to be that way all right uh yeah I've got a couple of labs build killer single page app uh is we're going to kind of look at that today and add some stuff to it uh but basically you're going to take a custom app and build out an interface uh that's not a workspace or a portal that you might put in an instance then my other one is Advanced workspace configuration and that's going to kind of go into some uh more advanced things like declarative resources and Page Collections and stuff that uh you probably need to do or you might need to do in a workspace that's a little higher l or I guess deeper level than uh the intro yeah and for my labs I've got two the first one is going to be a great introductory course to workspaces and the kind of stuff you might be asked to do on a workspace is an admin or a Dev so if you're new to the ecosystem if you're wanting to get familiar with UI Builder it's a great place to get started and I've also got a uh ADV kind of a a a lab that's going to cover all aspects of theming on the platform other than service portal we don't talk about service portal theming additionally we have a whole bunch of ask the experts ask the expert sessions are kind of different it's basically you 19 other people and an expert where you get to ask them politely a lot of questions that you may not be able to get answered otherwise it was a lot of fun last year so I wanted to make sure to highlight those and then finally we have some other sessions that aren't necessarily hosted by me or Brad um the first one is going to be by the other Tolson it's you sunk my Mothership creating complex interactivity in the next experience and I am so excited for it he is literally making the game battleship in UI Builder and teaching you how to connect components and all that fun stuff can you say something briefly about the next two Brad uh yeah very brief uh they are both uh about the new design system uh and I think we'll have an exciting announcement around that at knowledge uh that you can stay tuned for um but I think one of the and then I think there's an additional breakout as I'm looking at this but I think both of these are in the design we've got a whole design section of the show floor uh for this knowledge which uh is going to be cool yes that's G to be super exciting I can't wait to be able to talk publicly about this um hash saafe Harbor but that is it for my little collage of pictures make sure that if you can go to knowledge come find us come take a selfie it'll be tons of fun and uh it's it's honestly one of the more memorable things that I've done gotten to do in my career so if you ever get the chance to go definitely go now that I'm done plugging all of our stuff Brad what are we gonna do today yeah so today we're going to keep working on uh my knowledge lab sort of uh the lab's mostly done my Creator con lab and uh we're going to add some additional functionality to it partially because I want to play around a little more with most dialogues and this was some functionality I wanted to be in the lab but it was too long to add to the lab um so yeah we're we're gonna take a look at this um so I'll kind of go ahead this is the builda killer experience app that's right this is the fun lab not that workspaces aren't fun but uh this is this is the fun lab build a killer single page app um so let's show so at the end of the lab you'll end up with with uh everything on the page except for this little to-do list thing that I added 20 minutes ago uh and uh basically it's a note-taking app uh and it looks and feels like uh you know application manager and some other things that are in the instance um so it'll kind of get you started with building something that looks and feels like the rest of uh our little experiences like this that use the blank app shell um and so I'll just demo a little bit of how it works Works um if I go there's some searching I can click on a note and we load the form component and a modist dialogue here uh it's not quite so beautiful right now but uh I think that's that's going to change a little bit where our padding's going to get fixed uh I've been told U but anyway yeah you can create new notes save them edit them close them open other notes uh and so what I want to add today is the ability uh to also add to-dos and I want to be able to open a to-do list in a separate model and have my or mod list dialogue have my to-do list my to-do my to-do mod list dialogue and then my note mode list dialogue kind of next to each other and be able to create to-dos from my notes so we'll we'll see if that actually works uh but we're going to try it out and I'm just realizing no this will work uh all right so uh let's see what we have so far so I um this app is wow that's very violent um so we've got uh notes and categories and then I just added to-do lists uh with a list of to-dos underneath them and uh that's we just want to kind of take this and put it in uib uh you know this this type of interface where you have a record and then related lists uh is Good from like a data standpoint but it's not always great uh from a working with the record standpoint like I don't think you would want to manage a to-do list via like a related list here and having to click into record and the related list um so uh what we're going to do is you know make an easier way to work with these records in uib hopefully so now I have to figure out where we're going to start um this is what we're going to do all right so uh we've got a to-do list here I've got a couple of data resources that I add I I actually added this to-do list functionality the whole I the whole thing took me like 20 minutes before we came on the show uh which is kind of the power of our platform and uib I created a couple of tables with fields and then just added a couple of data resources that pull them into uib um so this is one of the things I love about working with uib uh is how quickly I can kind of scaffold some of these things uh so we've got a lookup to-do lists data resource I only have one to-do list right now but it basically looks looks all of them up uh we should go ahead and order this even though um even though I only have one um so we'll get the newest ones at the top and then I probably don't want more than about 10 so I've been trying to find something this whole time because I distinctly remember we've actually worked on this application for two previous episodes we have and I found episode 19 which is where we started working on on this application and where you set up the land the the look of the page uh by copying the application manager page but I just for the life of me could not find episode two and then I just remembered we did it on live coding happy hour so if you guys want to catch up check out episode 19 of you and I Builder live and then part two is actually live coding happy hour from I don't think you guys do episode numbers so I don't know it's the one where Brad's in it the week the week before last the week 29th this the 29th the 29th and then this is going to be part three yeah except I'm not using anything we did on life coding happy hour but it was still fun and useful um yeah so what we're going to want to do is when I click on we've got a couple of goals so the first one is when I click on a to-do a to-do list I want to pop up a mod list dialogue with a checklist component in it that has all my to-dos and then uh the kind of Next Level will be to have a button on the Note model that says create a to-do from this note and I've got a reference field from the to-dos back to the notes um and this is actually something when when I take notes I generally have a couple of different uh note tabs open because I A lot of times if I don't take it to-do from a note the thing will not happen all all right so uh let's go ahead and start by let's start by creating a new mod list dialog um so modelist dialogues are a new feature in Washington uh and it's one of those things where we release the functionality and then we use it really heavily um so if I click on you know data resources uh I have I get this modist dialogue the main difference between a modist dialogue and a modal uh is that I can still interact with the page behind the modelist dialogue so like for data resources that can be kind of helpful because I can still come in and you know I could configure this while looking at the data that's returned um so that's pretty helpful uh especially if you have a um a scenario where you do need to interact with a background the main one that we have uh is um uh I think uh I think it was CSM in their workspace really wanted wanted to be able to work with emails and POP emails out uh and then continue to work on the case behind it uh and so you know we we kind of came up with that where you can work on an email and still work with the case um but uh yeah so let's go ahead and add a new one here uh the modist dialogues are a little more complex than modals and popovers uh there's more and you have more options with them which is nice U but let's go ahead and create a new one uh and so in a modelist dialogue I have a few slots here uh so I've got an action slot that comes up here uh I've got a Content this is where we put the main stuff and then on the footer I've got uh this little footer block and so might put buttons down here uh who knows so let's go ahead and add a checklist component in the middle there um oh I think we're have to write some code for this that's that's all right um all right so we want to set this checklist it should be all of the to-dos uh that are associated with a to-do list uh so here's my checkbox item uh we're going to use a script here and I think I have this some sort of script like like this written somewhere uh Talk Amongst yourselves let me find it very well it is time for me to fill up space we should make this a segment anytime that Brad is trying to script something live maybe we can have like music playing in the background I'll put on a hat like those frogs with like the oh there we go that's perfect it's more that I just I don't really love writing code anymore and so I'm just going to try to find it somewhere no that's perfectly Fair that's what I tell people starting out is that you should get good at copying code and using it not at writing it from scratch it's like I already wrote it once exact so funny story uh it wasn't until I was doing an interview in my fifth year of being a developer uh that I actually wrote my first Glide aggregate uh because I always just copied it but for some reason in this interview they were like oh can you write out a Glide Aggregate and I'm like uh no I can't what are you talking about um I like to tell that one to people who are getting started too um but ay there's so much you can do you don't have to be Pro code uh I think we're going to have to think we're going to have to write it anyway hey Stefan how's it going seriously spread that around you only need to get good at copying code and knowing how to test it so that's why I teach people the anatomy of code what it does and that's all you really need to get started is is it good to go through a boot camp or go through a whole bunch of uh lessons online yes it is very good for you is it something that most of us can do with families and children and work not really so definitely work hard at learning how to read code and knowing how not to break your instance by running other people's code very important um Lisa's plugin now it says code generation and debug that can also be an option uh definitely need to learn how to read code in order to work with that um especially because I I mostly worked in Portal um so I am not used to at all es6 which uh it's es6 right Earl it's uh super confusing to me as I'm trying to get started and trying to make my own um custom components this is a great plug for Earl's new series on JavaScript yeah so I'm not used to es6 Adam get out of here with the es next um get out you're fired um yes yes V3 yes Paige I am not doing I am not good at doing the thing whatever it's called that's why I'm not good at it what uh Brad is typing out right now though is kind of the one thing that you should memorize is how to do the loop um it is super helpful and really useful I I looked up the loop also I I looked it up on W3 schools or I Googled it I never remember whether it's commas or semicolons and then uh and I don't think this is right but I want to get something in there and then we can check it same so basic basically what he's doing is he's creating a so the for Loop itself um the easiest way I could explain it is he's creating a variable called I now don't ask me why it's I sometimes it's j it's whatever letter you feel like making it um you're starting it off at zero and you're saying as long as that I number is shorter than the length of the array that you're trying to build or that you've got built just uh keep doing the things in the parenthesis and then add one to the value of the I which is what the plus plus does so what he's going to be doing here is he's going to be going first you can see he instantiated the checklist array variable up at the top and then he created another one Todo array where we're getting the results of our lookup and then he's going to Loop through every instance of the items in that array to create another array that will actually be the same um formatting as our component is expecting and then he's going to return the array yeah there you go um he's going to put one array inside the other array and build a bigger array so I heard you like arrays let's see what the chat's saying I can't type today a lot of copy pasting because I know Andrew's watching I mess something up though what's up with my uh why are you there squiggle all right I don't think this is right but uh so we basically want the CIS ID to be the ID and the label to be the label um so I copied that just in case no items in checklist of course it's not right um so let's yeah Chris has got it yolo let's just see what happens and then we could use the next experience tools to troubleshoot so we're what I'm going to do here is it gave me a schema which is nice um oh yeah we have a whole bunch of stuff so I should have copied this first um let me paste this into a BS code window Lisa I don't think I know enough about coding to accurately be able to like sports cast a hackathon though that would be really funny like trying to um yeah I think that would be fun I think that would be something fun like listen to Brad Earl and Andrew kind of sports cast uh I have it to do right yeah we're gonna do this We're Gonna Save and refresh U PowerPoint karaoke I'm refreshing uib because I I created a record after uib was in there all right or after the why don't I have a record here did I not note ID it's cuz that's to-do list ID I do have a to-do list ID it's so nice to be able to see that there's a populated value so nice you not here is this the right table it's making me crazy that nothing is there and there are things on the table there are let's just uh let's just take the filter off nice to do all right um well there we have we've got some stuff there so Road data I think I got that one right um we have I want active instead of State though I decided not to use State uh what were the so we need checked order uh item id label all right so where were we we were on the script on the modist dialogue it's gone and remember when I copied it and I didn't paste it anywhere undo no because it wasn't saved I saved it and then refreshed oh come on Brad all right let's try this again uh uh what were we now you get to film more time you could just go to the episode on YouTube and kind of go back and uh just copy from yourself I I actually have it up let's see yeah just go back it worked all right so this is a great time while Brad takes care of that for us to talk about saving and good coding hygiene make sure you hit save every time at all times over and over and over and over again um I can't think of a situation where not saving is ever the answer um this is actually uh because we saved but it is one thing to keep an eye out for I knew it was going to happen and I should have actually pasted it somewhere when you switch from uh like scripting and data binding to uh back to hardcoding it and then switch back to the script your script goes away uh which isn't very fun but that's why that happened that's good to know all right uh so we have checked and then we've got I'm not going to do order I don't think I need that and then Item ID instead of ID we used ID last time and then label I think I can get away with just those three for now all right uh so we have Earl I'm not gonna ask him that oh what was it so Brad why do you use uh VAR instead of let because let scares me uh I know I mixed let and VAR I noticed that as I was doing it um value it's just value right now I'm now I'm mixed up exactly Earl that's that's exactly what I'm saying I'm gonna stick to my old angular 3.3.1 no wait that's boot trrap 3.3.1 angularjs deated I miss bootstrap okay bootstrap was nice when I got it to work with the old uh technology and portal so Earl how about you how about you come on the show and tell us the difference between const let and bar I'm good those are the first words you're G to watch his uh series oh you're right this is a great time to plug his um okay copy and pasted it somewhere else right I did just copy and paste it somewhere else awesome I think that'll work yeah there we go yay it's checked oh yeah yeah we got to do the gotta go opposite so if it's active we don't want it to be checked that worked um here I want to create some more to do so uh I don't need that let's get three of them and then let's make one of them checked um and for those of us tuning in and learning like I am Adam says you let you use let unless you have a good reason to VAR and honestly I think the best reason to VAR is to just VAR gr and trigger a whole bunch of people online um I wish we had Earl's VG video as like a sound bit on here let's change them all yes we follow best practice here that's right I always follow best practices yes do as we say now as we do components wow that was a single brain cell moment right there and also name your um your data resources appropriately which I think you've been doing I do because when I want to reference them in a script and it's like look up records five it drives me nuts um all right so we have we have that um I think let's go ahead and pop the modal uh with this in there make sure it works uh so we want to do a couple of things um on that to-do list here I didn't uh I didn't label anything but you are labeling for the lab right well none of this is actually going to be in that this will be like a challenge exercise be like Watch the watch the show and try to do uh all right so I'm using a button bear component here because it's pretty easy to work with and I think it'll look fine uh what if we go I don't primary looks fine to me all right so we want to do a couple of things on event handler clicked we want to set this to-do list ID and we're going to set it [Music] to Unique value and then we also want to pop our modeless dialogue and so this works a little different than a modal um there are a few more things uh that we can do and so this is uh let's say um get stuff done and we want to pop oh let's I want to change the name of that first uh for modals and modess dialogues I would always rename them [Music] um because they get real confusing uh what is this to-do list dialog now I can't remember it now but one time you got real upset at how I was trying to name something in a component ID is there anything we should watch out for um I mean not no Das right sorry I think you said no dashes oh yeah yeah no dashes uh I think what's the naming convention for underscores I can't remember it's called something um yeah no dashes uh and then you just want to make sure so the main thing about naming components is that you're going to see them in the content tree here so it just needs to make sense to you when you look at it in the content tree snake case snake case I think that's right yes well yay said it so of course it's right of course it was yeah I have to all right and then I'm going to rename that button component just because no spaces but that one it'll stop you yes it will but it went away where did it go why did we lose our checklist button click undo it's back name all right I guess I won't rename it that's interesting that was the thing that we did right yeah ID and label edited okay could it be being referenced somewhere no I mean all the data is just found in here oh well I'm not going to worry about it too much all right so let's uh now we'll update we'll pop that mod modeless dialogue um get stuff done we'll yell at ourselves and then uh for this to-do list dialogue there's this single instance where you give it an ID and if you don't give it an ID if you if you don't give it an ID It'll like pop multiples and it's kind of weird um so I I haven't quite figured out I know why it's there but I haven't quite figured out exactly uh when I would not give it an ID all right so that should do both and then the last thing we will do is we'll go back to our to-do list and see if we can make the to-do list uh work well this time it looks like it's working all right so let's see how that goes so if I click on this I do get this modist dialogue and then I get I could have both of them up at the same time which is cool nice um so we've got 25 minutes left we could either make this actually work so when I check the to-dos it uh it uh checks them on the server or we could make we could add a button and create a to-do from our note I kind of want to do that one yeah I think that one sounds cool maybe we can Circle back all right so there's a couple of ways we can do this one of them is with a declarative action uh which is probably the right way to do it but it's also the way that takes longer um I I am using the form component in here and I really love the form Builder integration in the lab you actually do open form Builder and move things around but mostly because I wanted to show off the form Builder integration um so let's put it should we put it down here or should it go it should probably go on the action bar huh let's go add before we're going to remove the reset and it's not showing up it's possible that the action this actions only supports the action bar but let's well let's just see if we get a button there I don't see it on the tree yeah yeah you're right we're going to have to put it at the bottom where did it put it I don't think it put it anywhere oh yeah is showing up there yeah like it's it's letting you change things is it somewhere else in the content Tre it's possible this doesn't support more than one thing uh yeah sech I have a pretty good idea why it's not there and I don't want to talk about it um so let's add it at the bottom in the flitter button force not in the footer the flter what is happening all right let's refresh this [Music] thing Chris wants to know if you can add some bratting to give the right side some more white space we can uh no the form is super weird uh when it goes in there um it's like if I go why is it I was doing something different the other day uh we can try I'm wondering if it's just going to give me us oh there we go I tried that the other day and it didn't work so all right so let's see if we can add um oh Adam has a great suggestion what if we embed a portal page in here to add the button no that should be a sound bite all right another button after wait Brad can you go back that sounded like uh not actually Gabby this time can you do that again the volume was different I'm not gonna say it was too quiet but uh here we go so let's say add to do how we going to do this um we need a new to-do functionality on the uh uh so we need a way to put a name of it in I don't want to pop a modal on top of a mod list modal setion except this time make it a modal not a modal is modal we could do that that seems like a really terrible user interface uh how no comment I mean we're already in a in a weird spot here yeah that is that is kind of would you want to just have an input field show up when you click it I wonder maybe we could put something in the body here below the text or no maybe you have it just use the title of the note oo and then I can can edit it once it gets there yeah I like that let's do it um all right so my ADD Todo button I I really want it here but it's all right um uh so we need a create record data resource I don't I have one oh no I'm using the Form controller all right so let's go create record uh that's all we needed so let's rename it I do find it funny that for the purposes of working in this stage that they are using a modal in order to show how you're editing the modal list dialogue just for clarity and ease of use that that is that is a good [Laughter] point uh all right so let's go uh we want to execute the create notes no great to do and then we're going to set some things like note is is client State node ID and name oh how are we going to I think we have the name in The Record controller somewhere oh if I had set the display value correct on that record it would be easier where's my is an under available views no this is one of the really nice parts of the uh the data this would be impossible to find about this think I have like a form yeah Fields there we go I feel like this single-handedly addressed one of the bigger barriers of entry for UI Builder now it's just a matter of telling everybody it exists um what was the other thing I wanted to do to-do list that's going to be the to-do list ID I think that'll do it and then we want to refresh the lookup to do I let's see if this works maybe it works maybe it doesn't no Brad get it right it's sometimes it works sometimes it doesn't this is going to show up in your annual review think I have till next [Laughter] March so let's let's open them both up see what happens hey wait where did it go this is a new note oh that's note uh so now we need to be able to edit them from here let's do that yeah let's do that so that's uh it worked on the first try there's a first time for every shocking uh let's add a little bit of padding in here nope adds padding by adding margin designers everywhere hate him um I did have one of our designers is running through this lab he was like you mind if I uh change some things please do um all right so we want to be able to oh we want to be able to edit these oh can I just check allow editing what so what a fun component oh my gosh so you just need to add a button yeah so we'll just need to it should fire an event so it'll have edit clicked when a user clicks on well let's see what happens so it gave me an edit button so let's see what the edit button actually does okay I to that's that's fun okay so yeah we just need a client State parameter to control whether it's editable amazing checklist editable and we'll set that to false and then show edit mode and then we'll add an event or edit clicked and we will set that to true and then is their edit canell we should set it back to false and then let's justest then then we'll worry about updating it okay so oh that is so cool and then cancel oh and then we can just add an item from there whoa sometimes we release good components [Music] um let's add some padding there uh so we need an update let's how much time do we we can make this work let's go update record data resource um uh the real question is did this event expose its schema to uib which we're about to find out nope what does that mean so we well I'll show you here so we want to call this statea resource oh update to-do so this should be the notes table No it should be the to-do table there's so many to-do tables record is going to be ah this is where we want to know data action type all right we're going to have to write this in there's there's some problem problems with some of these schemas in that um in that uh they're Dynamic enough to where uib doesn't know what it's going to look like at runtime even if they expose the schema uh and so that's this is events is really where uh this sometimes breaks down a little bit just because events can be so complex uh it is something that we want to solve but uh it's not quite there so let's uh uh first let's get rid of that one actually we're going to go we're going to add a loging client script and I'm just going to console.log is it something we could look at with the next experience tools maybe but I think this is going to actually be a little quicker I mean we've been incredibly uh oh there it was how do you call it we've been incredibly efficient thank you wow the English just escaped my mind sometimes I forget English is my second language we've been incredibly efficient I'm sure we could stand to have a detour all right so it's going to want to update all of them though so we're not going to get this done but we can at least explore what this looks like what if I only change one oh and can you change the order oh all right so this is what we got so the name of the event is checklist save clicked what's in the payload oh it only sent us the ones that the one that got updated all right so we've got payload dot the payloads in array data we're probably going to have to script this but it's Item ID and label here we found the challenge for the for the uh lab there we go script it should we try to write a script or should we be done let's write a script all right um so let me I can't copy this oh I can't all right so let's just use our logging script since we're already calling it date uh to all right [Music] so see I did it let let uh to do event. payload dot event. payload I think that gives me an array and then why why won't how do I autocomplete the dumb question it's only autoc completing the word for that's not very helpful uh you know what I'm going I'm going to do the copy that last one oh and it's the same I named it the same look at me nice all right so every Todo uh we want to uh we want to [Music] execute api. dat dot uh look oh we just added this huh all right so hold on I am copying this and pasting it now we're going to save and refresh it didn't have all my data resources in the auto complete and I didn't want to type in the name faster it's still there ah it's still not there oh well uh this was update to do execute oh I can't remember what the uh here go um developer UI Builder data resource execute wouldn't it be funny if the first thing you clicked had your face on it hey I called it I don't know if I actually have code in here though no no go back um that has been the funniest thing about learning UI builder for this job is that anytime I look anything it's always Brad and it's been so surreal it's like oh that dude's on my team I'm on that dude's team what is going on one day it'll be my name just you wait peoples one day where is that and he is on developer. servicenow.com which is a great res source for you to look up apis we've also got the component Library here there we go where's execute it's right there it's right okay uh but what is it expecting I don't think this is what the create record data resources expecting all right I don't think we're going to make it I have to go find a code snippet from somewhere uh unless some I think it's like Fields dis I don't know let's try it and again to those of us who are watching who may be new to scripting this is what scripting actually looks like don't let any LinkedIn post or anything else try to glorify some fake like uh portrait or image of what coding is like this is what it's like confusing uh try to come up with more words that aren't too negative have oh yeah a lot of Googling so it was data do item id a lot of logging get very familiar with how to log your code because that is going to be the number one thing you're actually going to be writing Let's uh where was the oh that's the client script here I know we're just about done but just so we know for next time I go to update to do it'll tell me what it's expecting table record and um I don't know what the name of this one is and then use display values so all right I think I think we're done we're done so a said it best coding is flexible fun Dynamic freeing whatever you want it to be which are some really nice words that I typically don't associate with coding but I wish I lived in A's head so I think today's episode was extremely successful we got a lot done today we did get some stuff done I would like to direct everyone's attention once more as I struggle to share my screen because I uh stopped sharing them here we go do you see them Earl yay so once again everybody these are our knowledge sessions that we're going to be doing for knowledge it's going to be the first I don't know which week in May it's going to be all I know is that it's way too close you should go look up knowledge try to see if your work will send you or if you want to just pop in Vegas for a Loki Vegas trip it's going to be a lot of fun uh we've got these sessions that me and Brad are doing we've got our ask the experts that you can also come and ask questions at and then you've got all of uh a couple of other fun ones that we wanted to highlight and um yeah it's going to be great I hope to see y'all there and if you show up uh and you find us be sure to take pictures ask for a donut it'll be great any last words Brad I'm good there's a lot of growling going on somebody just pulled in the [Music] driveway good doggos very good doggos um um thank you guys so much for hanging out with us for the full hour I hope you all have a happy rest of your Thursday and we will see you guys again for another riveting episode of you and I Builder live on April 25th and that's going to be our last episode before knowledge when we take a uh a break see y'all then [Music] bye [Music] [Applause] [Music] [Music] n

View original source

https://www.youtube.com/watch?v=o_B8bIiOTOU